具有模块级别的“已注册钩子”变量似乎是最简单,最可靠的方法。
其他可能的解决方案在某些(而不是晦涩的)情况下
sys.excepthook会失效-
如果应用程序注册了一个自定义项
excepthook,则检查内置函数是否会失败,
excepthook在函数定义时存储原始函数将破坏随后注册的钩子函数。
import sys_hook_registered = Falsedef register_handler(force = False): global _hook_registered if _hook_registered and not force: return orig_excepthook = sys.excepthook def error_catcher(*exc_info): import logging log = logging.getLogger(__name__) log.critical("Unhandled exception", exc_info=exc_info) orig_excepthook(*exc_info) sys.excepthook = error_catcher _hook_registered = True


