繁体   English   中英

Ruby-救援后如何检查特定异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM