我在ruby中执行了以下代码。
码
def doCalc
begin
print( "Enter a number: " )
aNum = gets().chomp()
result = 100 / aNum.to_i
rescue Exception => e
result = 0
puts( "Error: " + e + "\nPlease try again." )
retry # retry on exception
else
msg = "Result = #{result}"
ensure
msg = "You entered '#{aNum}'. " + msg
end
return msg
end
puts( doCalc )
获取错误:
retry.rb:15:在
+': can't convert nil into String (TypeError) from retry.rb:15:in
中确保在doCalc' 来自retry.rb:15:doCalc' from retry.rb:21:in
'
我在控制台上输入0,因为我想检查此错误处理代码的工作原理。基本上想检查 重试 的工作情况。我理解重试是如何工作的,但是这个错误使我感到困惑,因为它说'' e'已经被指定为例外的是零,因为我不能将第15行更改为:
puts e
然后没有错误来。事实上,它打印:
除以0
我是经验丰富的java,但在ruby中是新的。我在这里缺少什么?
答案 0 :(得分:0)
由于您提供了0
作为输入,因此divide by 0
有例外。执行转到rescue
阻止,稍后转到ensure
阻止,将msg
保留为nil
类型,
你应该做的事情如下,
def doCalc
begin
print( "Enter a number: " )
aNum = gets().chomp()
result = 100 / aNum.to_i
rescue Exception => e
result = 0
msg = "Error: #{e.message}"
puts("#{msg} \n Please try again." )
retry # retry on exception
else
msg = "Result = #{result}"
ensure
msg = "You entered '#{aNum}'. #{msg}"
end
return msg
end
puts( doCalc )