python - 异常子类中的 Python logging.exception(即继承自 Exception 的 CustomError 类)
问题描述
每当我提出自定义 Exception 类时,我都会尝试使用 python 的内置日志记录模块“自动”记录异常信息,这样我就不必每次都编写 logger.exception(exception_message) 来获取 exception_info ( sys.exc_info) 在日志中正确部分,而不是 NoneType: None。
使用以下代码,每当出现 logger.exception 行而不是适当的 sys.exc_info 时,我都会得到“NoneType:None”。
import logging
logger = logging.getLogger('exceptions_module')
class CustomError(Exception):
def __init__(self, error_msg):
super().__init__(error_msg)
logger.exception(error_msg)
def forced_exception():
try:
raise Exception('some_exceptionh_occured')
except Exception as error_msg:
# Do some clean-up or other exception handling operations
# ...
# Now raise the exception as a custom error
raise CustomError(error_msg)
有时将低级异常重写为“更易于阅读”和用户友好的错误消息是非常有益的。(这是这里的主要用例)
那么有什么方法不会让我写 3 行:
# [...]
except Exception as error_msg:
new_custom_error_msg = 'User-friendly message for:' + error_msg
logger.exception(new_custom_error_msg)
raise CustomError(new_custom_error_msg)
想到了另一种选择,但仍然“迫使”我为每个引发的异常付出额外的努力,那就是每次都明确传递“正确的” sys.exc_info()
from sys import exc_info as exception_info
# [...]
class CustomError(Exception):
def __init__(self, error_msg, exc_info):
super().__init__(error_msg)
logger.exception(error_msg, exc_info=exc_info)
# [...]
except Exception as error_msg:
raise CustomError(new_custom_error_msg, exception_info())
每次我需要引发 CustomError时,我都非常倾向于明确添加“exception_info” ......
有什么建议可以使这个更精简并避免不必要的代码重复吗?
解决方案
推荐阅读
- sql - SQL更新后,我需要自动以html形式返回我的页面并更新数据
- python - Python——重写函数代码的更好方法?
- android - fit 无法获得每日步数
- c# - Xamarin.Forms 如何禁用列表视图上的悬停突出显示效果
- linux - 如何在 Heroku 上为我的应用安装 libstdc++6?
- javascript - NPM 安装给出错误致命:引用不是树
- hyperledger-fabric - 获取配置文件的 pb 格式时出错
- swift - 我可以有一个带有可拖动分隔符和可调整大小视图的 NSStackView 吗?
- html - 我怎样才能改变 div 所以当我按下它时,文本会改变但它的大小不会?
- python - Pandas/Numpy 中的迭代公式