我正在构建一个具有“永不失败(除非绝对必要)”理念的应用程序。系统将收集非致命错误,并在报告中将其作为警告呈现给最终用户。对警告类进行子类化似乎是一个好主意,但有一个非常奇怪的障碍:我只能使用以下库方法发出警告:
warnings.warn(message, category=None, stacklevel=1)`因此,假设我需要记录的警告之一是文本文档中大约99个拼写错误,以及每个拼写错误发生的行号:
class UserCannotSpell(UserWarning):
def __init__(self, misspelled_document):
super().__init__()
self.document = misspelled_document
self.misspellings = []
def add(self, misspelling):
self.misspellings.append(misspelling)已处理...a文档并准备好UserCannotSpell()对象。唯一的问题是:我不能raise它,也不能warnings.warn()它。有什么建议吗?
发布于 2015-01-24 06:20:02
感谢@BrenBarn指出消息可以是对象。这种方式的警告子类化看起来相当丑陋,但至少它是可用的:
with warnings.catch_warnings(record=True) as w:
warning_obj = UserCannotSpell('Houston, we have a problem')
warning_obj.custom_data = 33
warnings.warn(warning_obj)输出:
>>> w
[<warnings.WarningMessage object at 0x02E011F0>]
>>> w[0].message.custom_data
33https://stackoverflow.com/questions/28118236
复制相似问题