Python:如何忽略异常并继续?[重复]
- 2025-04-15 09:19:00
- admin 原创
- 35
问题描述:
我的代码中有一个 try...except 块,当抛出异常时。我只想继续执行代码,因为在这种情况下,一切仍然可以正常运行。问题是,如果你将 except: 块留空或只使用 #do nothing,就会出现语法错误。我无法使用 continue,因为它不在循环中。有没有一个关键字可以让我告诉代码继续执行?
解决方案 1:
except Exception:
pass
Python 文档中的 pass 语句
解决方案 2:
通用答案
Python 中的标准“nop”是以下pass
语句:
try:
do_something()
except Exception:
pass
使用except Exception
而不是裸except
避免捕获诸如SystemExit
等KeyboardInterrupt
异常。
Python 2
由于 Python 2 会记住最后抛出的异常,因此异常抛出语句中涉及的某些对象会无限期地保持活动状态(实际上,直到下一个异常发生)。如果这对您来说很重要,并且(通常)您不需要记住最后抛出的异常,那么您可能需要执行以下操作来代替pass
:
try:
do_something()
except Exception:
sys.exc_clear()
这将清除最后抛出的异常。
Python 3
在 Python 3 中,保存异常实例的变量在退出代码块时会被删除except
。即使该变量之前保存了值,在进入并退出except
代码块后,它也会再次变为undefined。
解决方案 3:
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
解决方案 4:
尝试一下:
try:
blah()
except:
pass
扫码咨询,免费领取项目管理大礼包!