我发现在带有 Python 2.5.5 的 Debian 上,该collections
模块没有Iterable
类。
示例: http: //python.codepad.org/PxLHuRFx
使用 Python 2.5.6 在 OS X 10.8 上执行的相同代码可以正常工作,因此我认为由于某种原因缺少此代码。
我必须让我的代码在所有 Python 2.5+ 上通过什么解决方法?
我发现在带有 Python 2.5.5 的 Debian 上,该collections
模块没有Iterable
类。
示例: http: //python.codepad.org/PxLHuRFx
使用 Python 2.5.6 在 OS X 10.8 上执行的相同代码可以正常工作,因此我认为由于某种原因缺少此代码。
我必须让我的代码在所有 Python 2.5+ 上通过什么解决方法?
我会检查对象是否__iter__
定义了函数。
所以hasattr(myObj, '__iter__')
这有效:
def f(): pass
import sys
results={'iterable':[],'not iterable':[]}
def isiterable(obj):
try:
it=iter(obj)
return True
except TypeError:
return False
for el in ['abcd',[1,2,3],{'a':1,'b':2},(1,2,3),2,f,sys, lambda x: x,set([1,2]),True]:
if isiterable(el):
results['iterable'].append('\t{}, a Python {}\n'.format(el,type(el).__name__))
else:
results['not iterable'].append('\t{}, a Python {}\n'.format(el,type(el).__name__))
print 'Interable:'
print ''.join(results['iterable'])
print 'Not Interable:'
print ''.join(results['not iterable'])
印刷:
Interable:
abcd, a Python str
[1, 2, 3], a Python list
{'a': 1, 'b': 2}, a Python dict
(1, 2, 3), a Python tuple
set([1, 2]), a Python set
Not Interable:
2, a Python int
<function f at 0x100492d70>, a Python function
<module 'sys' (built-in)>, a Python module
<function <lambda> at 0x100492b90>, a Python function
True, a Python bool
这在这个 SO 帖子中得到了更充分的探讨。