python - 在记录期间引发异常
问题描述
在 Python 3 中有没有办法在日志记录期间引发异常?我的意思是,我可以以某种方式配置标准logging
模块以在完成时引发异常logging.error(e)
吗?
解决方案
您通常不会通过调用来记录错误logging.error(e)
。你通常打电话
logging.error('my message', exc_info=True)
或者
logging.error('my message', exc_info=e) # Where e is the exception object
话虽如此,您可以扩展Logger
该类来执行此操作:
from logging import Logger, setLoggerClass
from sys import exc_info
class ErrLogger(Logger):
def error(msg, *args, **kwargs):
super().error(msg, *args, **kwargs)
err = kwargs.get('exc_info')
if not isintsance(err, Exception):
_, err, _ = exc_info()
if err is None:
err = SomeDefaultError(msg) # You decide what to raise
raise err
setLoggerClass
现在使用函数注册新类:
setLoggerClass(ErrLogger)
使用自定义设置自定义记录器可能比覆盖仅在根记录器上运行error
的模块级别更可靠。error
此处显示的方法将按以下顺序引发错误:
- 通过
exc_info
仅关键字参数传递的错误。 - 当前正在处理的错误。
SomeDefaultError
你指定的。
如果您想放弃此过程,请将之后的所有内容替换super().error(msg, *args, **kwargs)
为raise SomeDefaultError(...)
.
推荐阅读
- angular - Angular Jasmine 测试:使用 setTimeout 时,SPEC 没有任何期望
- filemaker - 如何从文件制作器中的门户行打印
- c - 在结构中按频率对数组中的字母进行排序
- php - Laravel 中的 Middleware vs Guards vs Gates/Policies 有什么区别
- java - 从管道分隔的文本文件中读取时出现 NoSuchElementException
- r - 如何在 Unix 系统上将剪贴板中的数据读入 R?
- android - 活动一只有一次
- c - 宏不符合 ISO C
- json - 将 JSON 文件中的关键字/值对组合成单个 JSON 以使用 curl 提交
- javascript - 如何将嵌套对象拆分为对象数组 - 避免 for 循环