7

在使用异常来表示错误的语言中,我想调用一些第三方代码,如果失败,则运行回退代码。例如:

try:
    result = third_party.fast_calculation()
catch:
    result = slower_calculation()

以我的经验,了解第三方代码可能引发的所有异常是非常罕见的。因此我不能在catch条款中列出这些例外。另一方面,我经常被建议不要出现catch所有可能的例外情况。

在这种情况下我应该如何写catch子句?

4

2 回答 2

1

只有当您有特定的方法来处理它们时,您才应该捕获特定的异常类型。您可以(并且应该)以最合适的顺序捕获尽可能多的特定类型的异常。

如果您只想以同样的方式处理每个异常,我相信您当前的、无类型的 catch 和它一样好。真正的问题,IMO,出现在你留下一个空的 catch 时,因为客户端代码无法知道函数是否真的做了它应该做的事情。

于 2016-02-20T02:29:15.563 回答
0

首先,检查您的第三方代码是否确实引发了异常。它可能不会。

其次,检查第三方代码是否没有抛出异常的返回结果。可以返回状态值以指示是否获得了成功的结果。如果是这样,可能需要进行状态检查以确定在返回错误状态后是否需要恢复操作(例如,使用“slower_calculation”方法)。

于 2016-02-25T20:24:13.497 回答