如何确定对象是否是序列

时间:2010-11-24 14:33:09

标签: python collections python-3.x

我可以想到两种方法来确定一个对象是否是一个序列:

  • hasattr(object, '__iter__')
  • 是否致电iter(object)会引发TypeError

因为请求宽恕而不是请求许可是最恐怖的,所以我会使用第二个成语,虽然我认为它更难看(另外,提出异常一旦你抓住TypeError来确定对象不是一个序列就会产生一个不合需要的“双异常”堆栈跟踪。)

最终,检查一个对象是否定义了一个详尽的__iter__方法,以确定一个对象是否是一个序列? (例如,在旧版本的Python中,str没有定义__iter__方法;我也听说过一些对象也可以简单地定义和使用__getitem__而无需定义{ {1}}并且像序列一样行动。)或者定义__iter__ 序列的合同

1 个答案:

答案 0 :(得分:4)

使用isinstance(obj, collections.Sequence)Abstract base classes正是为了这个。但它们在2.6之前并不存在。如果您被迫使用旧版本,那么您运气不佳并且更好地坚持使用EAFP。