对象不可迭代,但变得可迭代

时间:2012-01-22 03:50:04

标签: python django django-models

>>> carls = [c.source.out_crushes.all().select_related().values_list('target') for c in similar_crushes]
>>> [carlid for carlid in c for c in carls]
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'Crush' object is not iterable
>>> for c in carls:
...   pass
... 
>>> [carlid for carlid in c for c in carls]
[(1,), (1,), (3,), (3,)]

很抱歉这个可怕的问题标题,但我不知道如何更好地说出来,因为我完全迷失了。

这里发生了什么?为什么它在初始列表理解中不可迭代,但是当我分别迭代它的一部分时,它会变成可迭代的?

1 个答案:

答案 0 :(得分:4)

carls看起来应该是列表列表,例如[[(1,), (2,), (3,)], [(1,), (2,)]]

执行[carlid for carlid in c for c in carls]时,您尝试迭代最后定义的cCrush similar_crushes来自for c in carls:

当您执行c时,您将carls重新定义为PK列表中的最后一个元素,该列表是for i in range(100): pass print i # out : 99 元组的列表,可以迭代。

{{1}}