如何忽略异常并继续?

我试一试……除了块在我的代码和当异常抛出。我真的只想继续写代码因为在这种情况下,一切仍然能够正常运行。问题是,如果except:块为空或没有#do,就会出现语法错误。我不能用continue,因为它不在循环中。是否有一个关键字,我可以使用,告诉代码只是继续前进?

793380 次浏览

试试这个:

try:
blah()
except:
pass

通用的回答

Python中标准的“nop”是pass语句:

try:
do_something()
except Exception:
pass

使用except Exception而不是裸露的except避免捕获像SystemExitKeyboardInterrupt等异常。

Python 2

由于在Python 2中会记住最后一个抛出的异常,因此异常抛出语句中涉及的一些对象将无限期地保持活动状态(实际上,直到下一个异常)。如果这对你很重要,并且(通常)你不需要记住最后抛出的异常,你可能想要执行以下操作而不是pass:

try:
do_something()
except Exception:
sys.exc_clear()

这将清除最后抛出的异常。

Python 3

在Python 3中,保存异常实例的变量在退出except块时获得删除。即使变量之前持有一个值,在进入和退出except块之后,它也会再次变成未定义的

在Python 3.4中有一种新的方法:

from contextlib import suppress


with suppress(Exception):
# your code

下面是添加它的提交:http://hg.python.org/cpython/rev/406b47c64480

下面是作者Raymond Hettinger在谈论这个和其他各种Python热点(43:30的相关内容):http://www.youtube.com/watch?v=OSGv2VnC0go

如果您想要模拟完全的except关键字并忽略像# eyz1这样的东西(尽管您通常不会这样做),那么您可以使用with suppress(BaseException)

编辑:看起来ignored在3.4版本之前被重命名为suppress