Saltar al contenido

TypeError: el objeto ‘NoneType’ no es iterable en Python

Solución:

Significa el valor de data es None.

Explicación del error: el objeto ‘NoneType’ no es iterable

En python2, NoneType es el tipo de None. En Python3 NoneType es la clase de None, por ejemplo:

>>> print(type(None))     #Python2
<type 'NoneType'>         #In Python2 the type of None is the 'NoneType' type.

>>> print(type(None))     #Python3
<class 'NoneType'>        #In Python3, the type of None is the 'NoneType' class.

La iteración sobre una variable que tiene valor Ninguno falla:

for a in None:
    print("k")     #TypeError: 'NoneType' object is not iterable

Los métodos de Python devuelven NoneType si no devuelven un valor:

def foo():
    print("k")
a, b = foo()      #TypeError: 'NoneType' object is not iterable

Debe verificar sus construcciones de bucle para NoneType de esta manera:

a = None 
print(a is None)              #prints True
print(a is not None)          #prints False
print(a == None)              #prints True
print(a != None)              #prints False
print(isinstance(a, object))  #prints True
print(isinstance(a, str))     #prints False

Guido dice que solo use is para comprobar None porque is es más robusto para la verificación de identidad. No use operaciones de igualdad porque pueden escupir implementaciones de burbujas por sí mismas. Pautas de estilo de codificación de Python – PEP-008

Ninguno Los tipos son furtivos y pueden colarse desde lambdas:

import sys
b = lambda x : sys.stdout.write("k") 
for a in b(10): 
    pass            #TypeError: 'NoneType' object is not iterable 

NoneType no es una palabra clave válida:

a = NoneType     #NameError: name 'NoneType' is not defined

Concatenación de None y una cuerda:

bar = "something"
foo = None
print foo + bar    #TypeError: cannot concatenate 'str' and 'NoneType' objects

¿Que está pasando aqui?

El intérprete de Python convirtió su código a código de bytes pyc. La máquina virtual Python procesó el código de bytes, encontró una construcción de bucle que decía iterar sobre una variable que contenía Ninguno. La operación se realizó invocando el __iter__ método en el Ninguno.

Ninguno tiene __iter__ método definido, por lo que la máquina virtual de Python le dice lo que ve: que NoneType no tiene __iter__ método.

Esta es la razón por la que la ideología del tipo de pato de Python se considera mala. El programador hace algo completamente razonable con una variable y, en tiempo de ejecución, se contamina con None, la máquina virtual de Python intenta seguir adelante y vomita un montón de tonterías no relacionadas por toda la alfombra.

Java o C ++ no tienen estos problemas porque un programa de este tipo no podría compilar ya que no ha definido qué hacer cuando se produce None. Python le da al programador mucha cuerda para ahorcarse al permitirle hacer muchas cosas que no se espera que funcionen en circunstancias excepcionales. Python es un sí-hombre, diciendo que sí-señor cuando intenta evitar que te lastimes, como lo hacen Java y C ++.

Código: for row in data:

Mensaje de error: TypeError: 'NoneType' object is not iterable

¿De qué objeto se queja? Elección de dos, row y data. En for row in data, que necesita ser iterable? Solamente data.

Cual es el problema con data? Su tipo es NoneType. Solamente None tiene tipo NoneType. Entonces data is None.

Puede verificar esto en un IDE, o insertando, por ejemplo, print "data is", repr(data) antes de for declaración y volver a ejecutar.

Piense en lo que debe hacer a continuación:
¿Cómo se debe representar “sin datos”? ¿Escribimos un archivo vacío? ¿Generamos una excepción, registramos una advertencia o nos quedamos en silencio?

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *