TypeError: iteración sobre no secuencia

Rohan Timalsina 21 junio 2023
  1. Vuelva a crear TypeError: iteración sobre no secuencia en Python
  2. Iterar sobre una lista para corregir TypeError: iteración sobre la no secuencia en Python
  3. Use __iter__ para corregir el error TypeError: iteration over non-sequence en Python
TypeError: iteración sobre no secuencia

El TypeError se genera en Python cuando la función u operación se aplica a un objeto de un tipo inadecuado. Por ejemplo, agregar objetos enteros y cadenas devuelve TypeError.

El error TypeError: iteration over non-sequence ocurre cuando intenta iterar sobre un objeto que no es iterable. Este tutorial le enseñará a corregir TypeError: iteración sobre no secuencia en Python.

Vuelva a crear TypeError: iteración sobre no secuencia en Python

Ahora que ha entendido la causa de TypeError, volvamos a crear el error de iteración sobre la no secuencia en Python. Ejecutar el siguiente script en Python 2 da TypeError: iteración sobre no secuencia.

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)

Aquí, estamos tratando de iterar sobre el objeto Libros en lugar de la lista leer dentro de él. Como resultado, da TypeError: iteración sobre no secuencia en Python 2.

Producción :

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

En Python 3, obtendrá el siguiente resultado.

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

Iterar sobre una lista para corregir TypeError: iteración sobre la no secuencia en Python

Dado que Libros es un objeto, debe iterar sobre la lista dentro del objeto Libros. En este caso, será para libro en 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)

Producción :

Romeo and Juliet
To Kill a Mockingbird

Use __iter__ para corregir el error TypeError: iteration over non-sequence en Python

El método __iter__ se usa cuando un contenedor requiere un iterador. Debería devolver el objeto iterador que puede iterar sobre todos los objetos en el contenedor.

Libros es una instancia de Colección. Puedes usar el método __iter__ para iterar sobre el objeto Books.

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

El siguiente bloque contiene el script completo.

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)

Producción :

Romeo and Juliet
To Kill a Mockingbird

Así es como puedes resolver el error de iteración sobre no secuencia en Python. Esperamos que estas soluciones le resulten útiles.

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

Artículo relacionado - Python TypeError

Artículo relacionado - Python Error