Why do i get this TypeError: 'int' object is not iterable python?
Why do i get this TypeError: 'int' object is not iterable python?
为什么会出现这种类型的错误?
通常,我现在会使用 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
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]
# ...
如果您想枚举除最后一个对象之外的所有对象,也许您想要 slice 以忽略最后一个元素:
for this_index, this_object in enumerate(objects_clone[:-1]):
# ...
如果你想把索引和元素放在一起,你确实应该使用enumerate()
。这就是它的用途。 range()
,另一方面,一次给你一个对象:一个整数。而且,由于每个整数只有一个对象,您不能将每个整数解包为两个对象。这就是为什么 for i in range(num):
是一个如此常见的结构,而 for i,j in range(num):
不是。
为什么会出现这种类型的错误?
通常,我现在会使用 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
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]
# ...
如果您想枚举除最后一个对象之外的所有对象,也许您想要 slice 以忽略最后一个元素:
for this_index, this_object in enumerate(objects_clone[:-1]):
# ...
如果你想把索引和元素放在一起,你确实应该使用enumerate()
。这就是它的用途。 range()
,另一方面,一次给你一个对象:一个整数。而且,由于每个整数只有一个对象,您不能将每个整数解包为两个对象。这就是为什么 for i in range(num):
是一个如此常见的结构,而 for i,j in range(num):
不是。