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

时间:2014-04-30 12:38:35

标签: python exception-handling

如果我在sys.excepthook = log_uncaught_exceptions中写__main__并且发生了未处理的异常:

  • __main__,使用了新的异常处理程序。
  • 其中一个导入的模块,新的异常处理程序使用。

我可以将以下内容添加到我希望使用新异常处理程序的每个模块中:

import sys
from my_funcs import log_uncaught_exceptions
sys.excepthook = log_uncaught_exceptions

...但我觉得可以用更干净的方式完成,而且我不想修改我正在使用的第三方依赖项。

从上面的代码中创建模块并导入它并没有为该模块重新分配新的异常处理程序。

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

1 个答案:

答案 0 :(得分:1)

使用main.py:

import sys

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

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

import foo

和foo.py就是这样:

raise Exception("foo exception")

我得到了

$ python main.py
except1

这是我的期望。你在任何" import"之前分配了sys.excepthook吗?语句?