迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中 Importerror: Install XLRD for Excel Support 错误

发布时间:2023/05/16 浏览次数:162 分类:Python

在本篇文章中,我们将探讨在 Python 中使用 Pandas 包时可能遇到以下错误的原因和解决方案。ImportError: Install xlrd >= 0.9.0 for Excel support 。让我们首先简要介绍一下 Pandas。

解决 Python 中 TypeError: An Integer Is Required 错误

发布时间:2023/05/16 浏览次数:100 分类:Python

在 Python 代码中发生的另一个最常见的错误是 TypeError。本文将展示我们如何在 Python 中得到 TypeError。 此外,我们将通过使用必要的示例和解释来讨论该主题,以使该主题更容易理解。

Python 中 ConnectionRefusedError: [Errno 61] Connection Refused 错误

发布时间:2023/05/16 浏览次数:189 分类:Python

有时在设计客户端-服务器程序时,您可能会遇到错误 ConnectionRefusedError。Python中 ConnectionRefusedError 错误是如何产生的 正如我们已经讨论过的,这个错误主要发生在客户端程序无法连接到服务器

Python 中错误 TypeError: Must Be Real Number, Not STR

发布时间:2023/05/16 浏览次数:152 分类:Python

TypeError: must be real number, not str 错误涉及使用错误的类型和非实数,在本例中为 str 类型。使用 float() 或 int() 解决Python 中 TypeError: must be real number, not str

Python 中 AttributeError: Int Object Has No Attribute 错误

发布时间:2023/05/15 浏览次数:175 分类:Python

修复 Python 错误 AttributeError: 'int' object has no attribute。本篇文章重点介绍并提供了一种解决方案,以应对我们在 Python 中使用 int 数据类型时可能发生的特定错误。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便