假设我正在使用一个库X
,该库指定exception.BaseError
是X
的所有异常的基类。
现在,还有另一个例外,比如说X.FooError
,它当然继承自exception.BaseError
,但更通用,假设它处理无效输入。让我们假设还有许多其他这样的类,它们都继承自BaseError
,但都适用于一般情况。
X
|
BaseError
|
FooError
所以我想检查无效的输入。那么我应该捕获哪个异常呢?当然,捕获每个单独的异常是不可能的,所以我捕获了X.BaseError
,然后打印了一条错误消息。或者,我可以专门捕获X.FooError
,但这样我就会忽略所有其他错误情况。
这是不是执行此操作的标准方法--捕获基本异常?如果是,那么为什么会存在其他例外?对于一般情况,当我们想要捕获特定的异常时?
发布于 2011-06-01 10:48:28
只捕获您可以处理的异常。如果可以同时处理基异常和派生异常,则同时捕获这两个异常。但是一定要把派生的异常放在第一位,因为找到匹配的第一个异常处理程序就是使用的那个。
try:
X.foo()
except X.FooError:
pass
except X.BaseError:
pass
发布于 2011-06-01 10:48:07
和往常一样,在Python代码的风格指南PEP-8中也有很好的建议:
在捕获异常时,只要有可能,就会提到 specific exceptions ,而不是使用一个简单的<>D10子句。
里面有更多,但我在这里重现它是没有意义的。
在这种情况下,如果我以不同于BaseError
和BaseError
的方式来处理那些需要更通用处理的对象,我就会捕捉到细节。然而,我不会去了解内置的Exception
。
发布于 2011-06-01 10:49:04
您可以通过在except
子句中定义一个特定的异常来捕获它,如下所示:
try:
#do stuff
except X.FooError:
# handle the error
except (X.AnotherError, x.YetAnotherError), exc:
print 'I'm handling %s' % exc
请注意,您可以通过在元组中列出多个异常类来处理它们。
https://stackoverflow.com/questions/6199884
复制相似问题