julia icon indicating copy to clipboard operation
julia copied to clipboard

Fix error messages for ranges with missing

Open bkamins opened this issue 2 years ago • 2 comments

@nalimilan - this is a common error.

First a case when I think error message is OK (or at least acceptable):

julia> missing:1:missing
ERROR: TypeError: non-boolean (Missing) used in boolean context

Now a case when new users will be confused:

julia> missing:0.1:missing
ERROR: ArgumentError: StepRange should not be used with floating point

Source why it is common:

julia> x = [missing, 1.1, 0.3]
3-element Vector{Union{Missing, Float64}}:
  missing
 1.1
 0.3

julia> minimum(x):0.1:maximum(x) # clearly skipmisssing should be used but it is not obvious to the user
ERROR: ArgumentError: StepRange should not be used with floating point

bkamins avatar Aug 03 '22 07:08 bkamins

Good point. I'd say that the problem here is that the x:y:z syntax dispatches to StepRange despite the fact that y is floating point. An error should probably be thrown earlier, without mentioning StepRange, since the user didn't ask for it at any point. Printing the type of all three values would help users understand the problem.

nalimilan avatar Aug 03 '22 08:08 nalimilan

Yes, the reason is that the method upstream expects x and z to have the same type only. Most likely we need to add a method with Missing being a specific type and throw an error in that case. BTW a related issue is https://github.com/JuliaLang/julia/issues/46244.

Note that also:

julia> 0.1:0.1:missing
ERROR: MethodError: no method matching (::Colon)(::Float64, ::Float64, ::Missing)

is I think OK.

bkamins avatar Aug 03 '22 08:08 bkamins