【发布时间】:2023-03-23 09:57:01
【问题描述】:
假设我有这样的事情,它将未经处理的异常发送到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
有效:
import logging
logging.basicConfig()
register_handler()
undefined() # logs, then runs original excepthook
但是,如果register_handler() 被多次调用,则多个error_catcher 会在一个链中被调用,并且日志消息会出现多次..
我能想到几种方法,但没有一个特别好(比如检查sys.excepthook是否是error_catcher函数,或者在模块上使用“have_registered”属性以避免重复注册)
有推荐的方法吗?
【问题讨论】:
标签: python coding-style exception-handling