有像isiterable这样的方法吗?到目前为止我找到的唯一解决办法就是打电话
hasattr(myObj, '__iter__')
但是我不确定这有多愚蠢。
__iter__
from __future__ import print_function try: some_object_iterator = iter(some_object) except TypeError as te: print(some_object, 'is not iterable')
所述iter内置的检查的__iter__方法或串的情况下的__getitem__方法。
iter
__getitem__
通过检查对象的方法或属性签名而不是通过与某种类型对象的显式关系来确定对象类型的Python编程风格(“如果它看起来像鸭子,并且像鸭子一样嘎嘎叫,那一定是鸭子。”)通过强调接口经过精心设计的代码(而非特定类型)通过允许多态替换来提高其灵活性。鸭式输入避免使用type()或isinstance()进行测试。取而代之的是,它通常采用EAFP(比授权更容易请求宽恕)风格的编程。
... try: _ = (e for e in my_object) except TypeError: print my_object, 'is not iterable'
collections
from collections.abc import Iterable if isinstance(e, Iterable): # e is iterable
但是,这不会检查可通过迭代的类__getitem__。