我了解救援的概念-我的问题是:
begin rescue end
当我实际创建一个对象时,我应该在班级内编写代码还是应该在班级外编写代码?如果我有两个文件——一个是我的班级,一个是我调用那个班级的地方,我应该把我的救援脚本放在哪个脚本中?也许没关系,或者我应该两者都用。只是想知道这方面的最佳实践是什么......
我了解救援的概念-我的问题是:
begin rescue end
当我实际创建一个对象时,我应该在班级内编写代码还是应该在班级外编写代码?如果我有两个文件——一个是我的班级,一个是我调用那个班级的地方,我应该把我的救援脚本放在哪个脚本中?也许没关系,或者我应该两者都用。只是想知道这方面的最佳实践是什么......
异常处理的一般规则是在最低抽象级别捕获异常,以便对如何处理错误做出明智的选择。
如果您可以在类方法中做出明智的选择,请在其中包含您的救援逻辑。如果您在调用者级别有更多上下文,并且每次调用方法时都需要自定义逻辑,那么将救援逻辑放在类之外。
最佳实践是放置begin
并且rescue
仅围绕您想要更改默认引发行为的特定代码段(即退出您的代码,除非有更高级别的救援,否则可能终止进程),并实现您的预期目的。
这取决于您首先需要begin...rescue
条款的原因。
例如,如果您的类是 Web 服务,并且是该服务的一个组件,并且该块的目的是将所有引发的错误显示为浏览器中的调试堆栈跟踪,那么外部 Web 服务层就是您所在的位置应该挽救异常。您可能还应该涵盖大多数(如果不是全部)可能引发的错误类型。
或者,如果您的“内部”类提供对第三方服务的访问,并且救援是允许在连接失败时重试,则该块可能完全在内部类中。此外,您只rescue
需要重试有意义的特定失败。