python:iterator.groupby的宽泛版本,它跳过异常上的记录

时间:2011-05-11 03:04:55

标签: python exception-handling iterator group-by

我使用iterator.groupby根据类似的属性值将迭代器中的类似条目组合在一起:

 employment = dict(itertools.groupby(xtable_iterator), operator.attrgetter('key_to_ytable')))  

key_to_ytable是一个可以抛出异常的属性。所以,我的整个dict构造函数失败了。我想跳过'key_to_ytable'属性访问引发异常的条目,并使用groupby处理剩余的条目。

我的替代方案是什么? 1.继承groupby和override函数或编写我的自定义组 2.使用自定义attrgetter,在异常时返回None,然后过滤掉Nones
3.任何其他解决方案?

一些背景知识:我有一个库,它将数据库表封装为记录对象的迭代器。此记录对象的属性是列。在外键的情况下,库查找相应的表并将该值作为属性值获取。不幸的是,这些表格不能保证同步。因此,外键可能引用不存在的记录,在这种情况下,库会引发异常。

1 个答案:

答案 0 :(得分:1)

我在这种情况下投票支持自定义attrgetter,如:

employment = dict(itertools.groupby(xtable_iterator),
                  lambda x: getattr(x, 'key_to_ytable', None))
employment.pop(None)

这比过滤器或任何东西更简单,可能更快,你知道那里只有一个没有。