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

Python: How to ignore an exception and proceed?

本问题已经有最佳答案,请猛点这里访问。

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


1
2
except:
    pass


通用答案

Python中的标准"nop"是pass语句:

1
2
3
4
try:
    do_something()
except Exception:
    pass

使用except Exception而不是一个简单的except,避免捕获像SystemExitKeyboardInterrupt等异常。

Python 2

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

1
2
3
4
try:
    do_something()
except Exception:
    sys.exc_clear()

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

Python 3

在python3中,保存异常实例的变量在退出except块时被删除。即使该变量先前持有一个值,在进入和退出except块之后,它将再次变得未定义。


在Python 3.4中有一种新的方法可以做到这一点:

1
2
3
4
from contextlib import suppress

with suppress(Exception):
  # your code

下面是添加它的commit: 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


试试这个:

1
2
3
4
try:
    blah()
except:
    pass