首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >决定在Python中捕获哪些异常

决定在Python中捕获哪些异常
EN

Stack Overflow用户
提问于 2011-06-01 18:42:42
回答 3查看 211关注 0票数 7

假设我正在使用一个库X,该库指定exception.BaseErrorX的所有异常的基类。

现在,还有另一个例外,比如说X.FooError,它当然继承自exception.BaseError,但更通用,假设它处理无效输入。让我们假设还有许多其他这样的类,它们都继承自BaseError,但都适用于一般情况。

代码语言:javascript
运行
复制
 X
 |
BaseError
 |
FooError

所以我想检查无效的输入。那么我应该捕获哪个异常呢?当然,捕获每个单独的异常是不可能的,所以我捕获了X.BaseError,然后打印了一条错误消息。或者,我可以专门捕获X.FooError,但这样我就会忽略所有其他错误情况。

这是不是执行此操作的标准方法--捕获基本异常?如果是,那么为什么会存在其他例外?对于一般情况,当我们想要捕获特定的异常时?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-01 18:48:28

只捕获您可以处理的异常。如果可以同时处理基异常和派生异常,则同时捕获这两个异常。但是一定要把派生的异常放在第一位,因为找到匹配的第一个异常处理程序就是使用的那个。

代码语言:javascript
运行
复制
try:
  X.foo()
except X.FooError:
  pass
except X.BaseError:
  pass
票数 11
EN

Stack Overflow用户

发布于 2011-06-01 18:48:07

和往常一样,在Python代码的风格指南PEP-8中也有很好的建议:

在捕获异常时,只要有可能,就会提到 specific exceptions ,而不是使用一个简单的<>D10子句。

里面有更多,但我在这里重现它是没有意义的。

在这种情况下,如果我以不同于BaseErrorBaseError的方式来处理那些需要更通用处理的对象,我就会捕捉到细节。然而,我不会去了解内置的Exception

票数 3
EN

Stack Overflow用户

发布于 2011-06-01 18:49:04

您可以通过在except子句中定义一个特定的异常来捕获它,如下所示:

代码语言:javascript
运行
复制
try:
    #do stuff
except X.FooError:
    # handle the error
except (X.AnotherError, x.YetAnotherError), exc:
    print 'I'm handling %s' % exc

请注意,您可以通过在元组中列出多个异常类来处理它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6199884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档