[英]Ruby - how to check for specific exception after rescue?
在Ruby中,我想对特定的异常做一些特殊的事情,但不足以进行特定的救援。 在救援中检查特定异常的正确语法是什么?
样本(无效)代码:
begin
c = d
rescue => ex
if ex == NameError
puts 'NameError'
else
puts ex.message
end
end
在您的示例中, ex
是on异常的实例 ,与带有==
运算符(即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)
尽管我概述的先前方法是最常用的方法,并且通常是“首选”方法,但是您可以检查许多其他方法。 尽管仍然可以在类上使用相等性,但通常不建议使用该方法来实现该方法,因为它灵活性较差,对潜在意图的了解也不太清楚,上面的示例恰好表明了您希望如何处理该类的子类。指定的错误。
ex.class == NameError
我发现这个答案很好地解释了细微的差异。
我将使用多个救援块-一个仅捕获NameError
块,而另一个则捕获所有错误类的块:
begin
c = d
rescue NameError => ex
puts 'NameError'
rescue => ex
puts ex.message
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.