python dict len

Funciones y métodos de Python

El método len () solo funciona en objetos iterables como cadenas, listas y diccionarios. Esto se debe a que los objetos iterables contienen secuencias de valores. Si intenta utilizar el método len () en un valor None, encontrará el error & ldquo; TypeError: object of type & lsquo; NoneType & rsquo; no tiene len () & rdquo ;.

En esta guía, hablamos sobre lo que significa este error y cómo funciona. Analizamos dos ejemplos de este error en acción para que pueda descubrir cómo resolverlo en su código.




TypeError: objeto de tipo & lsquo; NoneType & rsquo; no tiene len ()

NoneType se refiere al tipo de datos None. No puede utilizar métodos que funcionen en objetos iterables, como len () , en un valor None. Esto se debe a que Ninguno no contiene una colección de valores. La longitud de None no se puede calcular porque None no tiene valores secundarios.

Este error es común en dos casos:

  • Donde se olvida que se -en funciones cambian una lista en el lugar
  • Donde se olvida una declaración de retorno en una función

Echemos un vistazo a cada una de estas causas en profundidad.




Causa n. ° 1: Las funciones integradas cambian las listas en el lugar

Vamos a crear un programa que ordena una lista de diccionarios que contienen información sobre los estudiantes de una escuela. Ordenaremos esta lista en orden ascendente según la calificación de un estudiante en su último examen.

Para comenzar, defina una lista de diccionarios que contenga información sobre los estudiantes y su puntaje de examen más reciente:

 estudiantes = [{"name": "Peter", "score": 76}, {"name ":" Richard "," score ": 63}, {" name ":" Erin "," score ": 64}, {" name ":" Miley "," score ": 89}] 

Cada diccionario contiene dos claves y valores. Uno corresponde al nombre de un estudiante y el otro corresponde al puntaje que obtuvo un estudiante en su último examen. A continuación, use el método sort () para ordenar nuestra lista de estudiantes:

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

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

Hemos declarado una función llamada & ldquo; score_sort & rdquo; que devuelve el valor de & ldquo; score & rdquo; en cada diccionario. Luego usamos esto para ordenar los elementos en nuestra lista de diccionarios usando el método sort () .


A continuación, imprimimos la longitud de nuestra lista:

 print ("Hay {} estudiantes en la lista.". format (len (sorted_students))) 

Imprimimos la nueva lista de diccionarios en la consola usando un bucle for :

 para s en sorted_students: print ("{} obtuvo una puntuación de {} en su última prueba. ".format (s [" nombre "], s [" puntaje "])) 

Este código imprime un mensaje que nos informa de cuántos puntos obtuvo un estudiante en su último examen cada estudiante en la lista & ldquo; sorted_students & rdquo ;. Ejecutemos nuestro código:

 Traceback ( última llamada más reciente): Archivo "main.py", línea 13, en & lt; módulo & gt; print ("Hay {} st udents en la lista. ". format (len (sorted_students))) TypeError: el objeto de tipo' NoneType' no tiene len () 

Nuestro código devuelve un error.

Para resolver este problema, necesitamos eliminar el código donde asignamos el resultado del método sort () a & ldquo; sorted_students & rdquo ;. Esto se debe a que el método sort () cambia una lista en su lugar. No crea una nueva lista.

Elimine la declaración de & ldquo; sorted_students & rdquo; enumerar y utilizar & ldquo; estudiantes & rdquo; en el resto de nuestro programa:

Ejecute nuestro código y vea qué sucede:

 Hay 4 estudiantes en la lista. Richard obtuvo una puntuación de 63 en su última prueba. Erin obtuvo una puntuación de 64 en su última prueba. Peter obtuvo una puntuación de 76 en su última prueba. Miley obtuvo una puntuación de 89 en su última prueba. 

Nuestro código se ejecuta correctamente. Primero, nuestro código nos dice cuántos estudiantes hay en nuestra lista. Luego, nuestro código imprime información sobre cada estudiante y cuántas calificaciones obtuvieron en su último examen. Esta información se imprime en orden ascendente según la calificación del alumno.





Causa # 2: Olvidar una declaración de devolución

Vamos a hacer que nuestro código sea más modular. Para hacer esto, trasladamos nuestro método de clasificación a su propia función. ; también definiremos una función que imprima información sobre la puntuación que obtuvo cada estudiante en su examen.

Comience por definir nuestra lista de estudiantes y nuestra función de ayuda de clasificación. Tomaremos prestado este código de anteriormente en el tutorial.

 estudiantes = [{"name": "Peter", "score": 76 }, {"name": "Richard", "score": 63}, {"name": "Erin", "score": 64}, {"name": "Miley", "score": 89}] def score_sort (s): return s ["score"] 

A continuación, escribe una función que ordene nuestra lista:

 def sort_list (estudiantes): Students.sort (key = score_sort) 

Finalmente, definimos una función que muestra información sobre cada estudiante & rsquo; rendimiento:

 def show_students (nuevos_students): print ("Hay {} estudiantes en la lista . ". format (len (estudiantes))) para s en new_students: print (" {} obtuvo una puntuación de {} en su última prueba. ". format (s [" nombre "], s [" puntuación "]) ) 

Antes de ejecutar nuestro código, tenemos que llamar a nuestras funciones:

 new_students = sort_list (estudiantes) show_students (nuevos_students) 

Nuestro programa primero ordenará nuestra lista usando la función sort_list () . Luego, nuestro programa imprimirá información sobre cada estudiante en la consola. Esto se maneja en la función show_students () .

Ejecutemos nuestro código:

 Traceback (última llamada más reciente): Archivo" main.py ", línea 21, en & lt; módulo & gt; show_students (new_students) Archivo "main.py", línea 15, en show_students print ("Hay {} estudiantes en la lista.". format (len (new_students))) TypeError: el objeto de tipo 'NoneType' no tiene len ( ) 

Nuestro código devuelve un error. Este error se ha producido porque hemos olvidado incluir un & ldquo; return & rdquo; declaración en nuestra & ldquo; sort_list & rdquo; función.

Cuando llamamos a nuestra función sort_list () , asignamos su respuesta a la variable & ldquo; new_students & rdquo ;. Esa variable se pasa a nuestra función show_students () que muestra información sobre cada estudiante. Para resolver este error, debemos agregar una declaración de retorno a la función sort_list () :

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

Venus, ingeniero de software en Rockbot

Ejecute nuestro código:

 Hay 4 estudiantes en la lista. Richard obtuvo una puntuación de 63 en su última prueba. Erin obtuvo una puntuación de 64 en su última prueba. Peter obtuvo una puntuación de 76 en su última prueba. Miley obtuvo una puntuación de 89 en su última prueba. 

Nuestro código devuelve la respuesta que esperábamos.





Conclusión

El error & ldquo; TypeError: objeto de tipo & lsquo; NoneType & rsquo; no tiene len () & rdquo; error cuando intenta use el método len () en un objeto cuyo valor sea None.

Para resolver este error, asegúrese de no asignar las respuestas de ningún enumerar métodos, como sort () , a una variable. Si esto no resuelve el error, asegúrese de que su programa tenga todas las declaraciones & ldquo; return & rdquo; que necesita para funcionar correctamente.

¡Ahora está listo para resolver este problema como un profesional de Python!





python dict len: StackOverflow Questions

Tutorials