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

时间:2009-02-22 11:02:22

标签: python exception

我试了一下...除了代码中的块和抛出异常时。我真的只想继续使用代码,因为在这种情况下,一切都仍然可以正常运行。问题是如果你将except:block留空或者没有#do,它会给你一个语法错误。我不能继续使用,因为它不在循环中。是否有一个可以使用的关键字告诉代码继续运行?

4 个答案:

答案 0 :(得分:504)

答案 1 :(得分:239)

通用答案

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块之后,它再次变为未定义

答案 2 :(得分:152)

在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)

修改:在3.4版本发布之前,ignored似乎已重命名为suppress

答案 3 :(得分:14)

试试这个:

try:
    blah()
except:
    pass