除了`StandardError`之外,为什么不能`rescue`捕获异常类?

时间:2013-02-09 09:16:17

标签: ruby exception

为什么Ruby设计为StandardError隐式处理rescue个异常?对于其他例外情况,我们为什么需要明确地使用rescue

begin
  #codes here which may generates exceptions
rescue
  #codes to handle some thing which really needed to be done when exceptions there
end

任何人都可以帮我理解它的核心吗?

2 个答案:

答案 0 :(得分:2)

我引用here

  

上面的图表显示大多数子类扩展了已知的类   作为StandardError。这些是典型Ruby的“正常”异常   程序试图处理。其他例外代表较低级别,   更严重或更不可恢复的条件,以及正常的Ruby程序   通常不会尝试处理它们。

希望这能回答你的问题。

答案 1 :(得分:2)

当您未明确指定类型时,默认行为rescue StandardError的原因是您通常不希望在程序中处理非标准错误,至少在没有明确提及它们的情况下。一些典型的非StandardError异常是;

LoadError
NotImplementedError
SyntaxError

通常,您希望了解程序中缺少脚本文件,代码中未实现的方法和语法错误,并且不会意外处理它们/在异常代码中忽略它们。

您还可以(不推荐)使用备用语法

捕获任何异常
rescue Exception => e