人们过去常常在Python中捕获,记录和报告多个数据验证错误?
我正在Python 3中构建一个应用程序,它首先验证输入数据然后对其进行处理。第一步报告错误是程序预期功能的一部分,因此我不希望我的验证器放弃第一个异常。特别是,数据是表格式的,我希望能够返回 - 而不是引发 - 表格的每一行都没有验证。
A forum discussion from a couple of years ago考虑了多种解决方案,包括以下内容,这对我来说似乎最干净:
errors = []
for item in data:
try:
process(item)
except ValidationError as e:
errors.append(e)
if errors:
raise MultipleValidationErrors(errors)
其中MultipleValidationErrors
类将使用适当的__str__
方法列出有关其中所有ValidationErrors
的有用信息。
其他人建议使用traceback
模块,但由于我想要捕获的异常是数据验证错误而不是程序错误,这似乎是不合适的。但是,获取logging
模块可能是合适的。
答案 0 :(得分:7)
我在C ++和Python中都使用过这个习惯用法。这是我所知道的最干净的解决方案,当你想要的是一个例外,而不是一个日志消息。它的缺点是组合异常通常占用线性空间,这在处理具有许多错误的大型数据集时可能会出现问题。