System: macOS 10.15.7
Julia version 1.6
I use R heavily for data analysis in the life sciences and am slowly learning Julia for similar tasks with DataFrames.jl and CSV.jl. Recently I was tripped up by a small error and would like to learn how I could improve my reading of Julia’s error messages.
How could I have improved my approach to diagnosing the following bug?
I made this call:
CSV.File("filepath",
normalizenames = true,
missingstring = ["", "NULL", "NA"])
and received this Error/stacktrace:
ERROR: MethodError: no method matching contains(::Vector{String}, ::String)
Closest candidates are:
contains(::AbstractString, ::Any) at strings/util.jl:98
contains(::Any) at strings/util.jl:159
Stacktrace:
[1] Header
@ ~/.julia/packages/CSV/CJfFO/src/header.jl:155 [inlined]
[2] CSV.File(source::String; header::Int64, normalizenames::Bool, datarow::Int64, skipto::Nothing, footerskip
::Int64, transpose::Bool, comment::Nothing, use_mmap::Nothing, ignoreemptylines::Bool, select::Nothing, drop::
Nothing, missingstrings::Vector{String}, missingstring::Vector{String}, delim::Nothing, ignorerepeated::Bool,
quotechar::Char, openquotechar::Nothing, closequotechar::Nothing, escapechar::Char, dateformat::Nothing, dateformats::Nothing, decimal::UInt8, truestrings::Vector{String}, falsestrings::Vector{String}, type::Nothing, types::Nothing, typemap::Dict{Type, Type}, pool::Float64, lazystrings::Bool, strict::Bool, silencewarnings::Bool, debug::Bool, parsingdebug::Bool, kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}
)
@ CSV ~/.julia/packages/CSV/CJfFO/src/file.jl:217
I didn’t look at strings/util.jl
as I suspected the error lay in my CSV.File
call. I did look at header.jl
and file.jl
at the lines mentioned in the stacktrace. Neither were revealing.
There seems to be a mismatch of the argument signature but beyond that I found no clue to which argument.
Eventually, I figured out that it was a typo. There are two similar keyword arguments in CSV.File: missingstring and missingstrings. I had used the singular and given a vector with more than one value. Note that both arguments take a Vector{String} type missingstrings::Vector{String}, missingstring::Vector{String}
.
Any recommendations on a better approach to reading the error message would be appreciated. It does seem that missingstring[s]
should be made into one keyword argument that can take one or more values.