在ruby中使用正确的异常子类

在ruby中使用正确的异常子类,ruby,exception,Ruby,Exception,我可以访问ruby的异常层次结构(pickaxe和hummingbird中都提到过),但我不确定使用哪个异常,因为我还没有找到关于每个术语含义的任何信息 使用正确的异常类是否重要?否 或者更确切地说,如果这对你来说不重要,那么对其他任何人来说都不重要。如果您正在编写一个库,您应该使用库的用户能够理解的东西,但仅此而已。“这取决于” Ruby的主要问题之一是缺乏良好的规范。不过,过去情况更糟 这主要是一个风格问题:如果您的错误可以用一个内置异常类很好地描述,请使用它。如果你认为子类有意义,就使用它

我可以访问ruby的异常层次结构(pickaxe和hummingbird中都提到过),但我不确定使用哪个异常,因为我还没有找到关于每个术语含义的任何信息

使用正确的异常类是否重要?

或者更确切地说,如果这对你来说不重要,那么对其他任何人来说都不重要。如果您正在编写一个库,您应该使用库的用户能够理解的东西,但仅此而已。

“这取决于”

Ruby的主要问题之一是缺乏良好的规范。不过,过去情况更糟

这主要是一个风格问题:如果您的错误可以用一个内置异常类很好地描述,请使用它。如果你认为子类有意义,就使用它

另外,您可以考虑如下:

创建非常复杂的异常 等级制度是浪费时间。没有人 关怀的结束,所有的努力都会结束 浪费。相反,创建一个 每个库或命名空间的异常以及 在那里面有一个例外的原因 异常,以指示 例外

例如,对于您的操作系统封装 libary,创建一个名为 OsencapException


在创建自己的异常时,它很重要。一个重要的警告是,从Exception而不是StandardError(常见错误)继承的异常将不会被rescue捕获(没有任何参数)。

这意味着您创建的任何异常类都应该始终从StandardError继承,而不是直接从Exception继承。我认为您可以把这一点说得更清楚一点……与其为每个库创建一个异常,我建议为您想要捕获的每个条件创建一个异常。默认情况下,您可以使用RuntimeError,当您检测到您正在考虑解析rescue块中的错误消息时,请创建一个新类