7

我可以在不执行以下操作的情况下捕获并转储一个异常(以及相应的堆栈跟踪),该异常会导致程序崩溃:

try:
   # whole program
except Execption as e:
   dump(e)
   raise

有时外部库崩溃,我想对 Python 死亡做出反应并记录它这样做的原因。我不想阻止异常使程序崩溃,我只想要调试信息。

就像是:

signals.register('dying', callback)

def callback(context):
    # dumping the exception and
    # stack trace from here

这甚至可能吗?

4

1 回答 1

12

是的,通过注册一个sys.excepthook()函数

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)
于 2013-03-06T11:57:14.033 回答