EDIT:阅读评论和答案后,我意识到我想做的事情没有多大意义。我的想法是我
我的代码中有一些地方可能会失败(通常是一些requests
电话可能不会接通),我想接住他们而不是
把一个try:
到处。我的具体问题是我会
不在乎它们是否失败并且不会影响代码的其余部分
(例如,看门狗调用)。
我将把这个问题留给后人,作为一首颂歌“思考
先解决真正的问题,然后再问”
我正在尝试处理所有未捕获(否则未处理)的异常:
import traceback
import sys
def handle_exception(*exc_info):
print("--------------")
print(traceback.format_exception(*exc_info))
print("--------------")
sys.excepthook = handle_exception
raise ValueError("something bad happened, but we got that covered")
print("still there")
这输出
--------------
['Traceback (most recent call last):\n', ' File "C:/Users/yop/.PyCharm50/config/scratches/scratch_40", line 10, in <module>\n raise ValueError("something bad happened, but we got that covered")\n', 'ValueError: something bad happened, but we got that covered\n']
--------------
因此,虽然加注确实被抓住了,但它并没有按照我想象的方式工作:调用handle_exception
,然后继续print("still there")
.
How can I do so?
你不能这样做,因为 Python 调用sys.excepthook
for uncaught例外情况.
在交互式会话中,这发生在控制权返回提示之前;在 Python 程序中,这发生在程序退出之前。
无法恢复程序的执行或“抑制”异常sys.excepthook
.
我能想到的最接近的是
try:
raise ValueError("something bad happened, but we got that covered")
finally:
print("still there")
没有except
条款,因此ValueError
不会被抓住,但是finally
保证块被执行。因此,异常钩子仍然会被调用并且'still there'
将被打印,但是finally
条款将被执行before sys.excepthook
:
如果任一子句发生异常且未处理,则
异常被暂时保存。最后子句被执行。如果
有一个已保存的异常,它在finally结束时重新引发
条款。
(from here)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)