Exception 如何在出现异常时可靠地调用第三方代码?

Exception 如何在出现异常时可靠地调用第三方代码?,exception,exception-handling,language-agnostic,robustness,Exception,Exception Handling,Language Agnostic,Robustness,在一种使用异常来表示错误的语言中,我想调用一些第三方代码,如果失败,则运行回退代码。例如: try: result = third_party.fast_calculation() catch: result = slower_calculation() 根据我的经验,了解第三方代码可能引发的所有异常是非常罕见的。因此,我不能在catch子句中列出这些异常。另一方面,我经常被建议不要捕捉每一个可能的异常 在这种情况下,我应该如何编写catch子句?只有当您有特定的方法来处理特定

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

try:
    result = third_party.fast_calculation()
catch:
    result = slower_calculation()
根据我的经验,了解第三方代码可能引发的所有异常是非常罕见的。因此,我不能在
catch
子句中列出这些异常。另一方面,我经常被建议不要捕捉每一个可能的异常

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

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


如果你只是想以同样的方式对待每一个异常,我相信你当前的非类型捕获是最好的。IMO,真正的问题是当您留下一个空捕获时,因为客户端代码无法知道函数是否实际执行了它应该执行的操作。

首先,检查您的第三方代码是否确实抛出异常。可能不会

其次,如果第三方代码没有引发异常,请检查返回的结果。可以返回一个状态值,以指示是否实现了成功的结果。如果是,可能需要进行状态检查,以确定在返回状态不良后是否需要恢复操作(例如,使用“较慢的计算”方法)