2024-04-19 16:06:18 发布
网友
我有一个尝试…除了我的代码块和当一个异常被抛出。我真的只想继续代码,因为在这种情况下,一切仍然可以正常运行。问题是,如果将except:block保留为空或使用“不做任何事”,则会出现语法错误。我无法使用continue,因为它不在循环中。有没有一个关键字可以让代码继续运行?
Python中的标准“nop”是pass语句:
pass
try: do_something() except Exception: pass
使用except Exception而不是一个空的except避免捕获SystemExit、KeyboardInterrupt等异常
except Exception
except
SystemExit
KeyboardInterrupt
由于上一个抛出的异常在Python2中被记住,异常抛出语句中涉及的一些对象将无限期地保持活动(实际上,直到下一个异常)。如果这对您很重要并且(通常)您不需要记住最后抛出的异常,您可能需要执行以下操作而不是pass:
try: do_something() except Exception: sys.exc_clear()
这将清除上次引发的异常。
在Python 3中,保存异常实例的变量在退出except块时被删除。即使变量先前持有一个值,在进入和退出except块之后,它再次变为未定义的。
except: pass
Python docs for the pass statement
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)。
with suppress(BaseException)
编辑:看起来ignored在3.4发行版之前被重命名为suppress。
ignored
suppress
一般答案
Python中的标准“nop”是
pass
语句:使用
except Exception
而不是一个空的except
避免捕获SystemExit
、KeyboardInterrupt
等异常Python2
由于上一个抛出的异常在Python2中被记住,异常抛出语句中涉及的一些对象将无限期地保持活动(实际上,直到下一个异常)。如果这对您很重要并且(通常)您不需要记住最后抛出的异常,您可能需要执行以下操作而不是
pass
:这将清除上次引发的异常。
Python3
在Python 3中,保存异常实例的变量在退出
except
块时被删除。即使变量先前持有一个值,在进入和退出except
块之后,它再次变为未定义的。Python docs for the pass statement
Python 3.4中提供了一种新的方法:
这是添加它的提交: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
。相关问题 更多 >
编程相关推荐