gpt4 book ai didi

python - 向 sys.excepthook 添加函数

转载 作者:太空狗 更新时间:2023-10-30 00:57:24 25 4
gpt4 key购买 nike

假设我有这样的东西,它向 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被链式调用,logging消息出现多次..

我能想到一些方法,但没有一个特别好(比如检查 sys.excepthook 是否是 error_catcher 函数,或者在模块上使用“have_registered”属性以避免重复-注册)

有推荐的方法吗?

最佳答案

您可以在注册处理程序之前检查 sys.excepthook 是否仍然是内置函数:

>>> import sys, types
>>> isinstance(sys.excepthook, types.BuiltinFunctionType)
True
>>> sys.excepthook = lambda x: x
>>> isinstance(sys.excepthook, types.BuiltinFunctionType)
False

关于python - 向 sys.excepthook 添加函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com