在 Julia 逻辑问题中 while 循环出现 try/catch 错误
while loop with try/catch error in Julia logic problem
我正在尝试编写一个 while 循环来测试输入是否有效,并且它会不断询问用户是否坚持输入错误。如果它是有效的,程序就会继续。这就是我所在的位置。
while true
try
selected_row = readline()
selected_row = parse(Int8, selected_row)
break
catch e
if isa(e, LoadError)
@warn "type a valid number between [1,8]"
elseif isa(e, ArgumentError)
@warn "type a valid number between [1,8]"
end
end
end
println("you chose (C|R) ($selected_row)")
问题是当输入正确时我得到一个错误。
LoadError: UndefVarError: selected_row not defined
while
循环创建一个新的作用域。现在解决问题的方法取决于您放置代码的位置。
如果它在里面,例如一个函数然后使用:
local selected_row
在循环之前(在函数体内)一切正常。
如果您的代码在顶级范围内,请写:
global selected_row = parse(Int8, readline())
在您的代码中,这将保证创建一个全局变量 selected_row
。
话虽如此,我建议您编写如下代码:
function get_int8()
while true
selected_row = tryparse(Int8, readline())
isnothing(selected_row) || return selected_row
end
end
selected_row = get_int8()
我正在尝试编写一个 while 循环来测试输入是否有效,并且它会不断询问用户是否坚持输入错误。如果它是有效的,程序就会继续。这就是我所在的位置。
while true
try
selected_row = readline()
selected_row = parse(Int8, selected_row)
break
catch e
if isa(e, LoadError)
@warn "type a valid number between [1,8]"
elseif isa(e, ArgumentError)
@warn "type a valid number between [1,8]"
end
end
end
println("you chose (C|R) ($selected_row)")
问题是当输入正确时我得到一个错误。
LoadError: UndefVarError: selected_row not defined
while
循环创建一个新的作用域。现在解决问题的方法取决于您放置代码的位置。
如果它在里面,例如一个函数然后使用:
local selected_row
在循环之前(在函数体内)一切正常。
如果您的代码在顶级范围内,请写:
global selected_row = parse(Int8, readline())
在您的代码中,这将保证创建一个全局变量 selected_row
。
话虽如此,我建议您编写如下代码:
function get_int8()
while true
selected_row = tryparse(Int8, readline())
isnothing(selected_row) || return selected_row
end
end
selected_row = get_int8()