Aprende a descifrar un mensaje de error en lugar de cerrarlo: tipo, archivo, línea y traza de la pila.
Abrir esta lección en KodokonUn error no es un castigo. Tu ordenador no te está juzgando ni se ríe de ti: se ha dado cuenta de que no sabe qué hacer y te está explicando por qué. Funciona exactamente igual que un GPS que anuncia "recalculando la ruta": no es un reproche, es información. El reflejo del principiante es cerrar la ventana roja sin leerla. El reflejo del desarrollador es leerla despacio, hasta el final. A menudo es el único momento en el que la máquina te habla con todas las letras.
Casi todos los mensajes de error contienen la misma información. El tipo de error, que lo clasifica dentro de una gran familia. El mensaje, que explica en una frase qué es lo que falla. El archivo implicado y el número de línea, que te dicen exactamente dónde mirar. Y a veces una traza de la pila, en inglés stack trace: la lista de los pasos que el programa recorrió antes de romperse.
Traceback (most recent call last):
File "shopping.py", line 12, in <module>
total = price * quantity
NameError: name 'quantity' is not definedEn el ejemplo anterior está todo dicho. El archivo es shopping.py, la línea es la 12, el tipo es NameError y el mensaje precisa name 'quantity' is not defined, es decir, "el nombre quantity no está definido". Traducido al español corriente: en la línea 12 estás usando una variable quantity que nunca creaste, o cuyo nombre escribiste mal. Ninguna investigación complicada: el mensaje ya contenía la respuesta.
Una traza de la pila de Python se lee de abajo arriba: la última línea da el tipo y la explicación, y justo encima aparecen el archivo y la línea culpable. Cuando la traza es muy larga, busca la primera línea que mencione tu propio archivo. Las líneas que citan archivos desconocidos, con nombres raros, pertenecen a las bibliotecas que estás usando: en el 99 % de los casos no son ellas las que tienen un fallo, sino la forma en que las llamas.
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
at showProfile (app.js:24:18)
at start (app.js:41:3)Unas cuantas formulaciones aparecen una y otra vez, y sale muy rentable reconocerlas. not defined significa que el nombre que has usado no existe en ese punto. undefined quiere decir que la cosa existe pero no tiene ningún valor. unexpected indica que el programa esperaba otra cosa, típicamente un paréntesis o una comilla olvidados. permission denied señala un problema de permisos, no de código. Y no such file or directory significa que la ruta que has escrito no lleva a ninguna parte.
not defined?