如何在存在异常的情况下稳健地调用第三方代码?

时间:2016-02-20 02:23:57

标签: exception exception-handling language-agnostic robustness

在使用异常信号错误的语言中,我想调用一些第三方代码,如果失败,则运行后备代码。例如:

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

根据我的经验,很少知道第三方代码可能抛出的所有异常。因此,我无法在catch子句中列出这些异常。另一方面,我经常被告知不要catch每个可能的例外。

在这种情况下我应该如何编写catch条款?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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