如何忽略 python 3 中向调用者引发的特定异常?
示例:
def do_something():
try:
statement1
statement2
except Exception as e:
# ignore the exception
logging.warning("this is normal, exception is ignored")
try:
do_something()
except Exception as e:
# this is unexpected control flow, the first exception is already ignored !!
logging.error("unexpected error")
logging.error(e) # prints None
我发现有人提到“由于 Python 会记住最后抛出的异常,因此异常抛出语句中涉及的一些对象将无限期地保持事件状态”,然后提到使用“sys.exc_clear()”在这种情况下在 python 3 中不再可用。有什么线索我怎样才能完全忽略 python3 中的异常吗?
最佳答案
在 Python 3
中无需执行此操作,sys.exc_clear()
已被删除,因为 Python 不像 Python 那样在内部存储最后引发的异常2:
例如,在 Python 2 中,异常在函数内部仍然保持事件状态:
def foo():
try:
raise ValueError()
except ValueError as e:
print(e)
import sys; print(sys.exc_info())
调用 foo
现在显示异常已保留:
foo()
(<type 'exceptions.ValueError'>, ValueError(), <traceback object at 0x7f45c57fc560>)
您需要调用sys.exc_clear()
以清除引发的Exception
。
在 Python 3 中,恰恰相反:
def foo():
try:
raise ValueError()
except ValueError as e:
print(e)
import sys; print(sys.exc_info())
调用相同的函数:
foo()
(None, None, None)
关于python - 忽略在 python 3 中向调用者引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057162/