Kodokon kodokon.com

Leer y entender un mensaje de error

Aprende a descifrar un mensaje de error en lugar de cerrarlo: tipo, archivo, línea y traza de la pila.

8 min · 3 preguntas

Abrir esta lección en Kodokon

Un 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.

PYTHON
Traceback (most recent call last):
  File "shopping.py", line 12, in <module>
    total = price * quantity
NameError: name 'quantity' is not defined
Un mensaje de Python: el archivo, la línea 12, el tipo NameError y su explicación.

En 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.

JAVASCRIPT
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
    at showProfile (app.js:24:18)
    at start (app.js:41:3)
La misma lógica en la consola del navegador: archivo app.js, línea 24, columna 18.

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.

Prueba de conocimientos

Comprueba que has retenido los puntos clave de esta lección.

  1. ¿Qué parte de un mensaje de error te dice dónde mirar primero?
    • El nombre del archivo y el número de línea
    • El color del texto en pantalla
    • La longitud total del mensaje
    • El nombre de tu sistema operativo
  2. ¿En qué sentido se lee una traza de la pila de Python?
    • De arriba abajo: la primera línea da la solución
    • De abajo arriba: la última línea da el tipo y la explicación
    • En cualquier sentido, es puramente decorativa
  3. ¿Qué significa normalmente un error que contiene not defined?
    • El nombre que has usado no existe en ese punto del programa
    • El archivo es demasiado grande para poder abrirlo
    • La conexión a internet se ha interrumpido