迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 错误 TypeError: Iteration Over Non-Sequence

作者:迹忆客 最近更新:2023/05/16 浏览次数:

当函数或操作应用于不适当类型的对象时,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 中迭代非序列错误的方法。 我们希望这些解决方案对大家有所帮助。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便