在使用异常信号错误的语言中,我想调用一些第三方代码,如果失败,则运行后备代码。例如:
try:
result = third_party.fast_calculation()
catch:
result = slower_calculation()
根据我的经验,很少知道第三方代码可能抛出的所有异常。因此,我无法在catch
子句中列出这些异常。另一方面,我经常被告知不要catch
每个可能的例外。
在这种情况下我应该如何编写catch
条款?
答案 0 :(得分:1)
只有在您具有处理它们的特定方式时,才应捕获特定的异常类型。您可以(并且应该)以最合适的顺序捕获尽可能多的特定类型的异常。
如果您只是想以同样的方式处理每个异常,我相信您当前的无类型捕获就像它获得的一样好。真正的问题,IMO,当你留下一个空的捕获时,因为客户端代码无法知道该函数是否实际上做了它应该做的事情。
答案 1 :(得分:0)
首先,检查您的第三方代码是否实际引发了异常。它可能没有。
其次,如果第三方代码没有抛出异常,请检查返回的结果。可以返回状态值以指示是否实现了成功的结果。如果是这样,可能需要进行状态检查以确定在返回错误状态后是否需要恢复操作(例如,使用" slow_calculation"方法)。