我可以捕获并转储一个异常(以及相应的堆栈跟踪),这会导致程序崩溃,而不会执行以下操作:
try:
# whole program
except Execption as e:
dump(e)
raise
有时外部库崩溃,我想对Python死亡作出反应并记录它的原因。我不想阻止Exception崩溃程序,我只想要调试信息。
类似的东西:
signals.register('dying', callback)
def callback(context):
# dumping the exception and
# stack trace from here
这甚至可能吗?
答案 0 :(得分:12)
是的,注册sys.excepthook()
function:
import sys
def myexcepthook(type, value, tb):
dump(type, value, tb)
sys.excepthook = myexcepthook
此替换默认钩子,它将回溯打印到stderr
。每当引发未捕获的异常时都会调用它,并且解释器即将退出。
如果要重用自定义挂钩中的原始异常挂钩,请调用sys.__excepthook__
:
def myexcepthook(type, value, tb):
dump(type, value, tb)
sys.__excepthook__(type, value, tb)