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

use*_*783 7 language-agnostic exception-handling exception robustness

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

try:
    result = third_party.fast_calculation()
catch:
    result = slower_calculation()
Run Code Online (Sandbox Code Playgroud)

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

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

hel*_*ker 1

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

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