假设我有这样的东西,它向logging.critical()
发送未经处理的异常:
import sys
def register_handler():
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
它起作用:
^{pr2}$但是,如果多次调用register_handler()
,则在一个链中调用多个{
我可以想出几种方法,但是没有一种方法特别好(比如检查sys.excepthook
是否是错误捕获器函数,或者在模块上使用“have_registered”属性以避免重复注册)
有没有推荐的方法?在
如果使
orig_excepthook
成为一个具有默认值的参数,则默认值在定义时固定一次。因此,对register_handler
的重复调用不会改变orig_excepthook
。在^{pr2}$
只生成一个对
log.critical
的调用。在如果将问题中的代码放入模块中,可以多次导入,但只会第一次执行。在
在注册处理程序之前,您只需检查
sys.excepthook
是否仍然是内置函数:相关问题 更多 >
编程相关推荐