python 内存溢出能捕获吗_python - 在一行中捕获多个异常(块除外) - 堆栈内存溢出...

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

做这个:

try:

may_raise_specific_errors():

except (SpecificErrorOne, SpecificErrorTwo) as error:

handle(error) # might log or have some other default behavior...

由于使用了逗号将错误对象分配给名称的较旧语法,因此需要使用括号。 as关键字用于分配。 您可以为错误对象使用任何名称,我个人更喜欢error 。

最佳实践

要以目前与Python向前兼容的方式做到这一点,您需要用逗号分隔Exceptions,并用括号将其包裹起来,以区别于早期的语法,后者通过遵循Exception类型来将异常实例分配给变量名称,以将其捕获为逗号。

这是一个简单用法的示例:

import sys

try:

mainstuff()

except (KeyboardInterrupt, EOFError): # the parens are necessary

sys.exit(0)

我仅指定这些异常以避免隐藏错误,如果遇到错误,我希望从中获得完整的堆栈跟踪。

您可以将异常分配给变量( e是常见的,但是如果您具有较长的异常处理能力,或者您的IDE仅像我的那样突出显示大于此的选择,则可能更喜欢使用更冗长的变量。)实例具有args属性。 这是一个例子:

import sys

try:

mainstuff()

except (KeyboardInterrupt, EOFError) as err:

print(err)

print(err.args)

sys.exit(0)

请注意,在Python 3中, except块结束时, err对象超出范围。

不推荐使用

您可能会看到用逗号分配错误的代码。 不赞成使用此用法,它是Python 2.5和更早版本中唯一可用的形式,并且如果您希望代码在Python 3中向前兼容,则应更新语法以使用新形式:

import sys

try:

mainstuff()

except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+

print err

print err.args

sys.exit(0)

如果在代码库中看到逗号名称分配,并且您正在使用Python 2.5或更高版本,请切换到新的方式来执行此操作,以便在升级时代码保持兼容。

suppress上下文管理器

可接受的答案实际上是最少4行代码:

try:

do_something()

except (IDontLikeYouException, YouAreBeingMeanException) as e:

pass

该try , except , pass线路可以与单线处理抑制上下文管理器,可以在Python 3.4 :

from contextlib import suppress

with suppress(IDontLikeYouException, YouAreBeingMeanException):

do_something()

因此,当您要pass某些异常时,请使用suppress 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值