在一行中捕获多个异常(块除外)

在一行中捕获多个异常(块除外)

我知道我能做到:

try:
    # do something that may failexcept:
    # do this if ANYTHING goes wrong

我也可以这样做:

try:
    # do something that may failexcept IDontLikeYouException:
    # say pleaseexcept YouAreTooShortException:
    # stand on a ladder

但是,如果我想在两个不同的例外中做同样的事情,我现在能想到的最好的方法就是这样做:

try:
    # do something that may failexcept IDontLikeYouException:
    # say pleaseexcept YouAreBeingMeanException:
    # say please

我是否可以这样做(因为在这两个例外情况下采取的行动是say please):

try:
    # do something that may failexcept IDontLikeYouException, YouAreBeingMeanException:
    # say please

现在,这实际上是行不通的,因为它与以下语法匹配:

try:
    # do something that may failexcept Exception, e:
    # say please

因此,我捕捉这两个不同的异常的努力并没有完全实现。

有办法吗?


肥皂起泡泡
浏览 523回答 3
3回答

潇湘沐

从…Python文档:例如,EXT子句可以将多个异常命名为带括号的元组。except (IDontLikeYouException, YouAreBeingMeanException) as e:     pass或者,仅适用于Python 2:except (IDontLikeYouException, YouAreBeingMeanException), e:     pass用逗号将异常从变量中分离出来,在Python2.6和2.7中仍然可以工作,但现在已被废弃,并且在Python 3中不工作;现在您应该使用as.

慕勒3428872

从…Python文档->8.3处理异常:A try语句可能有多个以外子句,以指定不同异常的处理程序。最多只执行一个处理程序。处理程序只处理相应TRY子句中出现的异常,而不处理相同TRY语句的其他处理程序中出现的异常。EXT子句可以将多个异常命名为括号大小的元组,例如:except (RuntimeError, TypeError, NameError):     pass注意,这个元组周围的括号是必需的,因为除了ValueError, e:是否用于通常编写为except ValueError as e:在现代Python中(如下所述)。为了向后兼容,仍然支持旧的语法。这意味着except RuntimeError, TypeError不等于except (RuntimeError, TypeError):但对except RuntimeError as TypeError:这不是你想要的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python