【发布时间】:2018-03-07 11:10:49
【问题描述】:
我已经构建了自定义异常,这些异常接受参数并根据常量格式化自己的消息。它们还打印到标准输出,以便用户理解问题。
例如:
defs.py:
PATH_NOT_FOUND_ERROR = 'Cannot find path "{}"'
exceptions.py:
class PathNotFound(BaseCustomException):
"""Specified path was not found."""
def __init__(self, path):
msg = PATH_NOT_FOUND_ERROR.format(path)
print(msg)
super(PathNotFound, self).__init__(msg)
some_module.py
raise PathNotFound(some_invalid_path)
我还想在抛出异常时记录它们,最简单的方法是:
logger.debug('path {} not found'.format(some_invalid_path)
raise PathNotFound(some_invalid_path)
但是在整个代码中这样做似乎是多余的,尤其是它使常量毫无意义,因为如果我决定更改措辞,我也需要更改记录器的措辞。
我试图做一些事情,比如将记录器移动到异常类,但让我失去了相关的LogRecord 属性,如name、module、filename、lineno 等。这种方法也输了exc_info
有没有办法在每次引发之前记录异常并保留元数据而不记录?
【问题讨论】: