我正在继续我的项目,创建一个纠正语法的函数,但似乎每次运行它,它都会生成一个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包,是的,它是导入的。
1条答案
按热度按时间6tr1vspr1#
在循环的顶部调用
parse(Int, "I")
,这会产生您看到的错误。您编写
if parse(Int, ws[1]
的事实表明,您只希望在某些情况下解析字符串,但是parse
调用将始终在if
子句中进行评估。也许你正在寻找一个
try ... catch
块来处理错误?或者你可以查看tryparse
函数来做一些类似if typeof(tryparse(Int, ws[i])) == Int
的事情,如果解析失败而不是出错,它将评估为false
。