TypeError: Iteration über Non-Sequence

Rohan Timalsina 21 Juni 2023
  1. Erstellen Sie TypeError: iteration over non-sequence in Python neu
  2. Iterieren Sie über eine Liste, um TypeError: iteration over non-sequence in Python zu beheben
  3. Verwenden Sie __iter__, um den Fehler TypeError: iteration over non-sequence in Python zu beheben
TypeError: Iteration über Non-Sequence

Der TypeError wird in Python ausgelöst, wenn die Funktion oder Operation auf ein Objekt eines ungeeigneten Typs angewendet wird. Beispielsweise gibt das Hinzufügen von Integer- und String-Objekten TypeError zurück.

Der Fehler TypeError: iteration over non-sequence tritt auf, wenn Sie versuchen, über ein nicht iterierbares Objekt zu iterieren. In diesem Tutorial lernen Sie, wie Sie TypeError: iteration over non-sequence in Python beheben.

Erstellen Sie TypeError: iteration over non-sequence in Python neu

Nachdem Sie die Ursache von TypeError verstanden haben, erstellen wir den Fehler iteration over non-sequence in Python neu. Das Ausführen des folgenden Skripts in Python 2 ergibt 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)

Hier versuchen wir, über das Objekt Bücher zu iterieren, anstatt über die darin enthaltene Liste gelesen. Als Ergebnis gibt es in Python 2 TypeError: iteration over non-sequence.

Ausgang:

Traceback (most recent call last):
  File "Main.py", line 17, in <module>
    for book in Books:
TypeError: iteration over non-sequence

In Python 3 erhalten Sie die folgende Ausgabe.

Traceback (most recent call last):
  File "Main.py", line 17, in <module>
    for book in Books:
TypeError: 'Collection' object is not iterable

Iterieren Sie über eine Liste, um TypeError: iteration over non-sequence in Python zu beheben

Da Books ein Objekt ist, müssen Sie innerhalb des Objekts Books über die Liste iterieren. In diesem Fall lautet es for book in 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)

Ausgang:

Romeo and Juliet
To Kill a Mockingbird

Verwenden Sie __iter__, um den Fehler TypeError: iteration over non-sequence in Python zu beheben

Die Methode __iter__ wird verwendet, wenn ein Container einen Iterator benötigt. Es sollte das Iteratorobjekt zurückgeben, das alle Objekte im Container durchlaufen kann.

Books ist eine Instanz von Collection. Sie können die Methode __iter__ verwenden, um über das Objekt Books zu iterieren.

class Collection:
    def __iter__(self):
        return iter(self.read)

Der folgende Block enthält das vollständige Skript.

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)

Ausgang:

Romeo and Juliet
To Kill a Mockingbird

So können Sie den Fehler iteration over non-sequence in Python lösen. Wir hoffen, dass Sie diese Lösungen hilfreich finden.

Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

Verwandter Artikel - Python TypeError

Verwandter Artikel - Python Error