Python:如何忽略异常并继续?

2024-04-19 16:06:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个尝试…除了我的代码块和当一个异常被抛出。我真的只想继续代码,因为在这种情况下,一切仍然可以正常运行。问题是,如果将except:block保留为空或使用“不做任何事”,则会出现语法错误。我无法使用continue,因为它不在循环中。有没有一个关键字可以让代码继续运行?


Tags: 代码情况关键字block语法错误exceptcontinue
3条回答

一般答案

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

try:
    do_something()
except Exception:
    pass

使用except Exception而不是一个空的except避免捕获SystemExitKeyboardInterrupt等异常

Python2

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

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

这将清除上次引发的异常。

Python3

在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关键字,同时也忽略KeyboardInterrupt之类的内容—尽管您通常不想这样做—您可以使用with suppress(BaseException)

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

相关问题 更多 >