代码之家  ›  专栏  ›  技术社区  ›  Humphrey Bogart

如何确定对象是否为序列

  •  2
  • Humphrey Bogart  · 技术社区  · 14 年前

    我能想到 确定对象是否为序列的方法:

    • hasattr(object, '__iter__') .
    • 以及是否打电话 iter(object) 提出 TypeError .

    因为它是最蟒蛇 请求宽恕 比去 请求许可 ,我会使用第二个习语,尽管我认为它更难看(另外,一旦您发现 类型错误 若要确定对象不是序列,则会产生不需要的“双异常”堆栈跟踪。

    最后,检查对象是否定义了 __iter__ 方法足够详尽以确定对象是否为序列?(例如,在较旧版本的Python中, str 没有定义 __iter__ 方法;我还听说有些对象还可以简单地定义和使用 __getitem__ 没有定义 __iter__ 就像一个序列)或者 __iter__ 合同 一个序列?

    1 回复  |  直到 14 年前
        1
  •  4
  •   user395760user395760    14 年前

    使用 isinstance(obj, collections.Sequence) . Abstract base classes 就是为了这个。但它们在2.6之前就不存在了。如果您被迫使用较旧的版本,那么您将失去运气,最好坚持使用EAFP。