在Ruby中,将异常与String连接时抛出异常

时间:2017-03-06 14:17:27

标签: ruby exception-handling

我在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中是新的。我在这里缺少什么?

1 个答案:

答案 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 )