这个问题只是出于好奇。假设我有列表x
x = ['a', 'b', 'c', 'd', 'e']
当我枚举此列表并犯以下预期错误时:
for i, x in enumerate(x):
print i + " : " + x
#Should use str(i) and str(x)
可以预料会产生此错误:
Traceback (most recent call last):
File "<pyshell#26>", line 2, in <module>
print i + " : " + x
TypeError: unsupported operand type(s) for +: 'int' and 'str'
但是x
列表将转换为一个字母字符串'a'
。
print x
'a'
我用数字列表x = [1, 2, 3, 4]
进行了同样的尝试,并将x
转换为1
的整数。
为什么会这样?以及为什么在我使用str(i)和str(x)时没有发生这种情况?
答案 0 :(得分:4)
这里enumerate
的问题使人分心。真正的问题是,您有一个名为x
的列表,然后在x
循环中将列表中的内值分配给名称for
。
直到您到达以下位置,代码才真正崩溃:
print i + " : " + x
那么,到此为止,名称的重新绑定已经在上一行了:
for i, x in enumerate(x):
现在x
指向另一个对象-列表中的第一项,无论它是字符串还是整数。重命名您的列表或循环变量。