【问题标题】:Why do i get this TypeError: 'int' object is not iterable python?为什么我得到这个 TypeError: 'int' object is not iterable python?
【发布时间】:2015-11-21 21:24:29
【问题描述】:

为什么会出现这种类型错误? 通常,我现在会使用enumerate(),但我特别想在这个给定范围内进行迭代:

r1 = (0,0,100,100)
r2 = (20,20,40,40)
r3 = (40,40,80,80)
these_objects = []
objects.append(r1)
objects.append(r2)
objects.append(r3)
objects_clone = copy.copy(these_objects)
iterations = int(len(objects_clone))-1
print(iterations)

for this_index, this_object in range(0, iterations):
    # ...

例外:

2
Traceback (most recent call last):
  File "test/test.py", line 50, in <module>
    for this_index, this_object in range(0, iterations):
TypeError: 'int' object is not iterable

【问题讨论】:

    标签: python range typeerror


    【解决方案1】:

    range(0, iterations) 对象生成整数,而不是元组。您要求for 循环将每个整数解压缩为两个变量:

    for this_index, this_object in range(0, iterations):
    

    解包整数失败:

    >>> this_index, this_object = 0
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'int' object is not iterable
    

    您只需遍历索引并在一秒钟内提取对象:

    for this_index in range(iterations):
        this_object = objects_clone[this_index]
        # ...
    

    如果你想枚举除最后一个之外的所有对象,也许你想切片以忽略最后一个元素:

    for this_index, this_object in enumerate(objects_clone[:-1]):
        # ...
    

    【讨论】:

      【解决方案2】:

      如果你想把索引和元素放在一起,你确实应该使用enumerate()。这就是它的用途。另一方面,range() 一次给你一个对象:一个整数。而且,由于每个整数只有一个对象,因此您不能将每个整数解压缩为两个对象。这就是为什么for i in range(num): 是一个如此常见的结构,而for i,j in range(num): 不是。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2016-01-09
        相关资源
        最近更新 更多