TypeError: iteración sobre no secuencia
-
Vuelva a crear
TypeError: iteración sobre no secuenciaen Python -
Iterar sobre una lista para corregir
TypeError: iteración sobre la no secuenciaen Python -
Use
__iter__para corregir el errorTypeError: iteration over non-sequenceen Python
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.
Artículo relacionado - Python TypeError
- Python TypeError: falta 1 argumento posicional requerido
- Python TypeError: Unhashable Tipo: Lista
- Resuelva el TypeError: no todos los argumentos se convirtieron durante el formato de cadena en Python
- Resuelva el TypeError: se requiere un número entero en Python
- Solucione el error de tipo de Python: los índices de lista deben ser números enteros, no una lista
- TypeError: debe ser un número real, no STR
Artículo relacionado - Python Error
- Administrar fallas de segmentación en Python
- Archivo <Stdin>, Línea 1, en <Módulo> Error en Python
- Arreglar AttributeError: el objeto 'generador' no tiene atributo 'siguiente' en Python
- Arreglar el comando cl.exe falló: no existe tal archivo o directorio en Windows
- Arreglar NameError: la variable no está definida en Python
- Arreglar Socket.Gaierror: [Errno 8] Nodename ni Servname proporcionado, o desconocido en Python
