为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2019-06-26 14:56:52
在一行中捕获多个异常(块除外)我知道我能做到: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因此,我捕捉这两个不同的异常的努力并没有完全实现。有办法吗?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

从…Python文档:

例如,EXT子句可以将多个异常命名为带括号的元组。

except (IDontLikeYouException, YouAreBeingMeanException) as e:
    pass

或者,仅适用于Python 2:

except (IDontLikeYouException, YouAreBeingMeanException), e:
    pass

用逗号将异常从变量中分离出来,在Python2.6和2.7中仍然可以工作,但现在已被废弃,并且在Python 3中不工作;现在您应该使用as.


查看完整回答
反对 回复 2019-06-26
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

从…Python文档->8.3处理异常:

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:这不是你想要的。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 522 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信