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