有没有办法在没有try / except的情况下对异常提升到程序顶部?

时间:2013-03-06 11:55:50

标签: python exception

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

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

这甚至可能吗?

1 个答案:

答案 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)