原文: Int Object is Not Iterable – Python Error [Solved]

如果你在运行你的 Python 代码时看到报错 “TypeError: 'int' object is not iterable”,这意味着你正试图遍历一个整数或其他不能应用循环的数据类型。

在 Python 中,可迭代的数据是列表、元组、集合、字典等等。

此外,这个错误是 “TypeError”,意味着你正试图对一个不合适的数据类型进行操作,例如,将一个字符串与一个整数相加。

今天之后,你在运行 Python 代码时就不会遇到这个错误了。因为在这篇文章中,我不仅会告诉你如何解决它,我还会告诉你如何查看 __iter__ 魔法方法,以便你能看到一个对象是否可迭代。

如何解决 Int 对象不可迭代的问题

如果你试图遍历一个整数,你会得到这个报错:

count = 14

for i in count:
    print(i)
# Output: TypeError: 'int' object is not iterable

解决这个问题的一个方法是将变量传入 range() 函数。

在 Python 中,range 函数检查传入的变量,并返回一系列从 0 开始、在指定数字之前停止的数字。

现在循环将运行:

count = 14

for i in range(count):
    print(i)
    
# Output: 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
# 13

另一个使用该解决方案的例子是下面的片段:

age = int(input("Enter your age: "))

for num in range(age):
    print(num)

# Output: 
# Enter your age: 6
# 0
# 1
# 2
# 3
# 4
# 5

如何检查数据或对象是否是可迭代的?

要检查某些特定的数据是否是可迭代的,你可以使用 dir() 方法。如果你能看到神奇的 __iter__ 方法,那么这些数据就是可迭代的。如果没有,那么这些数据就不是可迭代的,你不应该费力地去遍历它们。

perfectNum = 7

print(dir(perfectNum))

# Output:['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', 
# '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

在输出中没有找到 __iter__ 魔法方法,所以变量 perfectNum 是不可迭代的。

jerseyNums = [43, 10, 7, 6, 8]

print(dir(jerseyNums))

# Output: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

找到了魔法方法 __iter__,所以列表 jerseyNums 是可迭代的。

小结

在这篇文章中,你了解了 “Int Object is Not Iterable” 错误以及如何解决它。

你也了解了如何检查一个对象或一些数据是否可迭代。

如果你在一些数据中查找 __iter__ 魔法方法而没有找到它,最好不要试图在这些数据中循环,因为它们不是可迭代的。

谢谢你阅读本文。