8

当我运行以下命令时,ArgumentError 似乎忽略了救援。来自 Ruby 的 ArgumentError 错误消息出现在控制台上,但我的 puts 消息没有出现。我尝试使用 TypeError 和 ZeroDivisionError 进行救援,并且成功了。

def divide(a, b)
    begin
        a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s
    rescue ArgumentError
        puts 'there must be two arguments'
    end 
end

divide(4)
4

2 回答 2

9

异常不会在函数内部抛出,而是在调用它的地方抛出,所以你需要在其他地方捕获它:

def divide(a, b)
  a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s
end

begin
  divide(4)
rescue ArgumentError
  puts 'there must be two arguments'
end

虽然这可行,但捕获ArgumentError是一个非常糟糕的主意,因为它表明您的代码中有一个错误,您不应该从中恢复。

于 2012-05-21T21:31:26.290 回答
1

将对这部分代码进行救援:a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s。如果您明白我的意思,您的异常不是在方法中触发,而是在调用时触发。

于 2012-05-21T21:31:34.327 回答