Python 错误 TypeError: Iteration Over Non-Sequence
当函数或操作应用于不适当类型的对象时,Python 中会引发 TypeError。 例如,添加整数和字符串对象会返回 TypeError。
当您尝试迭代不可迭代的对象时,会出现错误 TypeError: iteration over non-sequence 。 本篇文章将介绍修复 TypeError: iteration over non-sequence 。
重现 Python 中 TypeError: iteration over non-sequence
现在您已经了解了 TypeError 的原因,让我们在 Python 中重新创建非序列错误的迭代。 在 Python 2 中运行以下脚本会出现 TypeError: iteration over non-sequence。
class Book:
def __init__(self, name, author):
self.name = name
self.author = author
class Collection:
def __init__(self):
self.read = []
def add_book(self, name, author):
self.read.append(Book(name, author))
if __name__ == "__main__":
Books = Collection()
Books.add_book('Romeo and Juliet', 'William Shakespeare')
Books.add_book('To Kill a Mockingbird', 'Harper Lee')
for book in Books:
print(book.name)
在这里,我们试图遍历对象 Books 而不是其中读取的列表。 结果,它给出了 TypeError: iteration over non-sequence in Python 2。
输出:
Traceback (most recent call last):
File "Main.py", line 17, in <module>
for book in Books:
TypeError: iteration over non-sequence
在 Python 3 中,您将获得以下输出。
Traceback (most recent call last):
File "Main.py", line 17, in <module>
for book in Books:
TypeError: 'Collection' object is not iterable
遍历列表以修复 Python TypeError: iteration over non-sequence
由于 Books 是一个对象,因此您必须遍历对象 Books 内的列表。 在这种情况下,它将用于 Books.read 中的书。
class Book:
def __init__(self, name, author):
self.name = name
self.author = author
class Collection:
def __init__(self):
self.read = []
def add_book(self,name,author):
self.read.append(Book(name,author))
if __name__ == "__main__":
Books = Collection()
Books.add_book('Romeo and Juliet','William Shakespeare')
Books.add_book('To Kill a Mockingbird','Harper Lee')
for book in Books.read:
print(book.name)
输出:
Romeo and Juliet
To Kill a Mockingbird
使用 __iter__
修复 Python TypeError: iteration over non-sequence Error
当容器需要迭代器时使用 __iter__
方法。 它应该返回可以迭代容器中所有对象的迭代器对象。
Books 是 Collection 的一个实例。 您可以使用 __iter__
方法迭代对象 Books。
class Collection:
def __iter__(self):
return iter(self.read)
以下块包含完整的脚本。
class Book:
def __init__(self, name, author):
self.name = name
self.author = author
class Collection:
def __init__(self):
self.read = []
def add_book(self,name,author):
self.read.append(Book(name,author))
def __iter__(self):
return iter(self.read)
if __name__ == "__main__":
Books = Collection()
Books.add_book('Romeo and Juliet','William Shakespeare')
Books.add_book('To Kill a Mockingbird','Harper Lee')
for book in Books:
print(book.name)
输出:
Romeo and Juliet
To Kill a Mockingbird
这就是解决 Python 中迭代非序列错误的方法。 我们希望这些解决方案对大家有所帮助。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串