Python ninguno

Funciones y métodos de Python

Con Python, solo puede iterar sobre un objeto si ese objeto tiene un valor. Esto se debe a que los objetos iterables solo tienen un elemento siguiente al que se puede acceder si su valor no es igual a Ninguno. Si intenta iterar sobre un objeto None, encontrará el TypeError: & lsquo; NoneType & rsquo; el objeto no es iterable error.

En esta guía, hablamos sobre lo que significa este error y por qué puede encontrarlo. Analizamos un ejemplo para ayudarlo a resolver cómo resolver este error común de Python.

TypeError: & lsquo; NoneType & rsquo; el objeto no es iterable

Para que un objeto sea iterable , debe contener un valor. Un valor None no es iterable porque no contiene ningún objeto. Ninguno representa un valor nulo.

Existe una diferencia entre un objeto Ninguno y un iterable vacío. Este error no se genera si tiene una lista vacía o una cadena.

Esto se debe a que listas y strings tienen un tipo de datos iterable. Cuando el intérprete de Python encuentra una lista vacía, no itera sobre ella porque no hay valores. Python no puede iterar sobre un valor None, por lo que el intérprete devuelve un error.

Este error es común cuando declaras una función y olvidas devolver un valor.

Un escenario de ejemplo

Escribamos un programa que tome una lista de nombres de estudiantes y filtre aquellos que comiencen con" E ". Imprimiremos esos valores en la consola.

Comience por definir una función que filtre a los estudiantes & rsquo; nombres:

El 81% de los participantes afirmaron que se sentían más seguros acerca de sus perspectivas laborales después de asistir a un bootcamp. Asóciese a un bootcamp hoy.

El graduado promedio de un bootcamp pasó menos de seis meses en la transición profesional, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Esta función recorre cada elemento en los & ldquo; class_names & rdquo; lista usando un bucle for. Para cada artículo, nuestro bucle verifica si el artículo comienza con la letra "E". Si es así, ese nombre se agrega a los & ldquo; new_class_names & rdquo; list.


A continuación, escriba una función que recorra nuestra nueva lista e imprima cada valor en la consola:

 def show_students (class_names): para c en class_names: print (c) 

Aquí, declaramos una lista de estudiantes a través del cual nuestro programa debe buscar. Pasamos esta lista de estudiantes a través de nuestra función filter_students:

 estudiantes = ["Elena", "Peter", "Chad", "Sam"] estudiantes_e_name = filter_students (estudiantes) 

Este código ejecuta la función filter_students que encuentra todos los estudiantes cuyos nombres comienzan con & ldquo; E & rdquo ;. La lista de estudiantes cuyos nombres comienzan con & ldquo; E & rdquo; se llama estudiantes_e_name. A continuación, llamamos a nuestra función show_students para mostrar la nueva lista de estudiantes:

 show_students (estudiantes_e_name) 

Ejecutemos nuestro código y veamos qué sucede:

 Traceback (última llamada más reciente): Archivo "principal .py ", línea 14, en & lt; módulo & gt; show_students (estudiantes_e_name) Archivo "main.py", línea 8, en show_students para c en class_names: TypeError: El objeto 'NoneType' no es iterable 

Nuestro código devuelve un mensaje de error.

La solución

Cuando intentamos iterar sobre la variable class_names en el show_students, nuestro código detecta un valor None y genera un error. Esto se debe a que el valor que hemos pasado como & ldquo; class_names & rdquo; es Ninguno.

Este error se debe a que nuestra función filter_students no devuelve un valor. Cuando asignamos el resultado de la función filter_students a la variable Students_e_name, se establece el valor None.

Para solucionar este error, tenemos que devolver un valor en nuestra función filter_students :

 def filter_students (class_names): new_class_names = [] para c en class_names: if c.startswith ("E"): new_class_names.append (c) # Hemos agregado una declaración de retorno aquí return new_class_names def show_students (class_names): for c in class_names: print (c) Students = [" Elena "," Peter "," Chad "," Sam "] estudiantes_e_name = filter_students (estudiantes) show_students (estudiantes_e_name) 

Este código devuelve el valor de new_class_names al programa principal. < br>

Ejecutemos nuestro código para ver si funciona:

 Elena 

Nuestro código ahora imprime con éxito los nombres de los estudiantes cuyos nombres comienzan con & ldquo; E & rdquo ;.


Evitar la excepción NoneType

Técnicamente, puede evitar la excepción NoneType comprobando si un valor es igual a None antes de iterar sobre ese valor. Considere el siguiente código:

 def filter_students (class_names): new_class_names = [] para c en class_names: if c.startswith ("E"): new_class_names.append (c) return new_class_names def show_students (class_names): if class_names no is None: para c en class_names: print (c) estudiantes = [ "Elena", "Peter", "Chad", "Sam"] estudiantes_e_name = filter_students (estudiantes) show_students (estudiantes_e_name) 

La función & ldquo; show_students () & rdquo; se ejecuta correctamente porque compruebe si class_names es un valor None antes de intentar iterar sobre él. Esta no es la mejor pra ctice en la mayoría de los casos porque la causa de un error NoneType puede ser un problema en otra parte de su código.

Si agregamos el & ldquo; no es None & rdquo; Consulte nuestro programa completo, no sabemos que nos perdimos una declaración de devolución en otra función. Es por eso que si ve este error, es mejor aceptar la excepción en lugar de manejarla usando un & ldquo; no es Ninguno & rdquo; comprobar.



Conclusión

El TypeError: & lsquo; NoneType & rsquo; el objeto no es iterable se genera un error cuando intenta iterar sobre un objeto cuyo valor es igual a Ninguno.

Para resolver este error, asegúrese de que cualquier valor que intente iterar sobre se les ha asignado un objeto iterable, como una cadena o una lista. En nuestro ejemplo, olvidamos agregar un & ldquo; return & rdquo; declaración a una función. Esto hizo que la función devolviera None en lugar de una lista.

Ahora estás listo para resolver este error común de Python en tu propio código.

"Career Karma entró en mi vida cuando más lo necesitaba y rápidamente me ayudó a combinar con un bootcamp. Dos meses después de graduarme, encontré el trabajo de mis sueños que se alineaba con mis valores y metas en la vida. "

Venus, ingeniero de software de Rockbot





Python ninguno: StackOverflow Questions

Tutorials