Python 如何为整个包重新分配一次'sys.excepthook'?

Python 如何为整个包重新分配一次'sys.excepthook'?,python,exception-handling,Python,Exception Handling,如果我在\uuu main\uuuu中写入sys.excepthook=log\u uncaught\u exceptions,则未处理的异常会发生在: \uuuu main\uuuu,将使用新的异常处理程序 作为导入的模块之一,新异常处理程序未使用 我可以在希望使用新异常处理程序的每个模块中添加以下内容: import sys from my_funcs import log_uncaught_exceptions sys.excepthook = log_uncaught_excepti

如果我在
\uuu main\uuuu
中写入
sys.excepthook=log\u uncaught\u exceptions
,则未处理的异常会发生在:

  • \uuuu main\uuuu
    ,将使用新的异常处理程序
  • 作为导入的模块之一,新异常处理程序未使用
我可以在希望使用新异常处理程序的每个模块中添加以下内容:

import sys
from my_funcs import log_uncaught_exceptions
sys.excepthook = log_uncaught_exceptions
。。。但我觉得这可以用一种更干净的方式完成,而且我不想修改我正在使用的第三方依赖关系

用上述代码生成一个模块并导入它并没有为该模块重新分配新的异常处理程序

问题:为整个包重新分配异常处理程序的干净方法是什么?

main.py如下:

import sys

def except1(type,value,traceback):
    print 'except1'

if __name__=='__main__':
    sys.excepthook=except1

import foo
raise Exception("foo exception")
和foo.py如下所示:

import sys

def except1(type,value,traceback):
    print 'except1'

if __name__=='__main__':
    sys.excepthook=except1

import foo
raise Exception("foo exception")
我明白了


这正是我所期望的。您是否在任何“导入”语句之前分配了sys.excepthook?

Ahh,我遇到的是:线程中发生的任何异常。线程被该线程类捕获;它捕获异常并打印stacktrace。这意味着,如果它捕获到异常,它就不是未处理的异常(即,异常不会“一直到堆栈之外”),因此不会由
sys.excepthook
处理。无论如何,谢谢你的帮助。