Ruby忽略了救援ArgumentError

当我运行以下命令时,ArgumentError似乎忽略了rescue。 来自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) 

exception不会在函数内部抛出,但是在调用它的时候,所以你需要在其他地方捕获它:

 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是一个非常糟糕的主意,因为它表示您的代码中的错误,您应该无法从中恢复。

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