在Ruby中,我想为特定的异常做一些特殊的事情,但不足以进行特定的救援。在救援中检查特定异常的正确语法是什么?
示例(无效)代码:
begin
c = d
rescue => ex
if ex == NameError
puts 'NameError'
else
puts ex.message
end
end
答案 0 :(得分:4)
在您的示例中,ex
是异常的实例,并且与==
运算符(即{ {1}}对象。您需要对照实际的类对象检查错误的类。
Class
您可以检查许多其他方法,尽管我概述的先前方法是最常用的方法,并且通常是“首选”方法。尽管仍然可以在类上使用相等性,但通常不建议使用该方法来实现该方法,因为它灵活性较差,对潜在意图的了解也不太清楚,上面的示例恰好表明了您希望如何处理该类的子类。指定的错误。
# A NameError or an error that is a subclass of NameError
ex.is_a?(NameError)
ex.kind_of?(NameError)
# NameError ONLY, not even sub-classes of NameError
ex.instance_of?(NameError)
我发现this answer很好地解释了细微的差异。
答案 1 :(得分:1)
我将使用多个救援块-一个只能捕获NameError
,另一个可以捕获所有错误类:
begin
c = d
rescue NameError => ex
puts 'NameError'
rescue => ex
puts ex.message
end