【问题标题】:Why can't `rescue` catch exception classes other than `StandardError` by default?为什么 `rescue` 默认不能捕获 `StandardError` 以外的异常类?
【发布时间】:2013-02-09 09:16:17
【问题描述】:

为什么 Ruby 被设计为仅由 rescue 隐式处理 StandardError 异常?对于其他异常,我们为什么要明确地用rescue 写出来?

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

谁能帮我理解它的核心?

【问题讨论】:

    标签: ruby exception


    【解决方案1】:

    当您没有明确给出类型时,默认行为rescue StandardError 的原因是您通常不想在程序中处理非标准错误,至少在没有明确提及它们的情况下是这样。几个典型的非标准错误异常是;

    LoadError
    NotImplementedError
    SyntaxError
    

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

    您也可以(不推荐)使用替代语法捕获任何异常

    rescue Exception => e  
    

    【讨论】:

    • 似乎 Ruby 的异常是这样设计的,没什么技术性。好吧,无论如何+1 也给你。 :)
    • Downvoter:投票没有帮助,但没有留下关于为什么也没有帮助的评论。
    【解决方案2】:

    我引用here

    上图显示大部分子类扩展了一个已知的类 作为标准错误。这些是典型 Rub​​y 的“正常”异常 程序试图处理。其他例外代表较低级别, 更严重或更难恢复的情况,以及正常的 Ruby 程序 通常不会尝试处理它们。

    希望这能回答你的问题。

    【讨论】:

    • 是的!我同意你的看法。答案太实用了,而我的期望有点不同,更具技术性。 :) 我仍然对此感到满意。 +1给你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2021-03-16
    • 1970-01-01
    相关资源
    最近更新 更多