惯用的收集方式&报告Python中的多个异常

时间:2012-03-26 16:08:14

标签: python exception logging

人们过去常常在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模块可能是合适的。

1 个答案:

答案 0 :(得分:7)

我在C ++和Python中都使用过这个习惯用法。这是我所知道的最干净的解决方案,当你想要的是一个例外,而不是一个日志消息。它的缺点是组合异常通常占用线性空间,这在处理具有许多错误的大型数据集时可能会出现问题。