决定在Python中捕获哪些异常

use*_*312 7 python exception-handling

假设我使用的库X指定了例如exception.BaseError所有异常的基类X.

现在,还有另一个例外,比如说X.FooError,它当然是继承的,exception.BaseError但更广泛,假设它处理无效输入.让我们假设还有许多其他类似的东西,BaseError但是对于一般化的案例而言都是如此.

 X
 |
BaseError
 |
FooError
Run Code Online (Sandbox Code Playgroud)

所以我想检查无效输入.那么我应该抓住哪个例外?当然,捕获每个单独的异常是不可能的,所以我抓住X.BaseError然后打印一条错误消息.或者我可以抓住X.FooError具体但然后我错过了所有其他错误情况.

这是标准的做法吗 - 捕获基本异常?如果是,那么为什么存在其他例外呢?对于我们想要捕获特定异常的一般情况?

Ign*_*ams 10

只捕获您可以处理的异常.如果您可以处理基本异常和派生异常,则捕获两者.但请确保首先放置派生的异常,因为第一个异常处理程序发现匹配是使用的.

try:
  X.foo()
except X.FooError:
  pass
except X.BaseError:
  pass
Run Code Online (Sandbox Code Playgroud)