debugging Julia中的无效基数10位数参数错误

kognpnkq  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(93)

我正在继续我的项目,创建一个纠正语法的函数,但似乎每次运行它,它都会生成一个ArgumentError。
我的代码:

function grmr(s)
    ws = split(s, " ")
    ss = ""
    for i in 1:length(ws)
        if parse(Int, ws[i])
            ws[i+1] = ItemQuantity(parse(Int, ws[i]), ws[i+1])
            ws[i] = ""
        elseif ws[i] in ["many", "multiple", "numerous", "several", "few", "some"]
            ws[i+1] = pluralize(singularize(ws[i+1]))
        elseif ws[i] in ["single", "a", "an"]
            ws[i+1] = singularize(ws[i+1])
        elseif split(ws[i])[end] == "s"
            ws[i] = pluralize(singularize(ws[i]))
        elseif ws[i] in ["a", "an"]
            ws[i] = indefinite(ws[i+1])
        end
        ss = string(ss, ws[i], " ")
    end
    return ss
end

我尝试了grmr("I have a apple")grmr("My favorite is a apple"),以确保它将其更正为“我有一个苹果”和“我最喜欢的是一个苹果”,但这两种情况都出现了这样的错误:

ArgumentError: invalid base 10 digit 'I' in "I"
Stacktrace:
 [1] tryparse_internal(#unused#::Type{Int64}, s::SubString{String}, startpos::Int64, endpos::Int64, base_::Int64, raise::Bool)
   @ Base .\parse.jl:137
 [2] parse(::Type{Int64}, s::SubString{String}; base::Nothing)
   @ Base .\parse.jl:241
 [3] parse
   @ .\parse.jl:240 [inlined]
 [4] grmr(s::String)
   @ Main .\REPL[2]:5
 [5] top-level scope
   @ REPL[3]:1

对于“My favorite is a apple”,它是相同的错误,除了开头是invalid base 10 digit "M" in "My",所以我意识到它生成了第一个单词的第一个字符的错误。顺便说一下,我使用的是EnglishText包,是的,它是导入的。

6tr1vspr

6tr1vspr1#

在循环的顶部调用parse(Int, "I"),这会产生您看到的错误。
您编写if parse(Int, ws[1]的事实表明,您只希望在某些情况下解析字符串,但是parse调用将始终在if子句中进行评估。
也许你正在寻找一个try ... catch块来处理错误?或者你可以查看tryparse函数来做一些类似if typeof(tryparse(Int, ws[i])) == Int的事情,如果解析失败而不是出错,它将评估为false

相关问题