Un mensaje rojo a las siete
Una cadena de cafeterías calcula cada noche el importe medio de sus tickets. El martes, el informe no llega.
Tu responsable te reenvía doce líneas de texto rojo y una pregunta: qué ha pasado.
Parece mucho, pero casi siempre basta con leer bien dos líneas.
Al final de esta lección
Nota
Puedo leer un mensaje de error y encontrar la solución.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Mensaje de error | texto que explica por qué se ha parado un programa | |
| Traceback | informe de Python que dice dónde se ha parado | |
| Tipo de error | nombre de lo que ha fallado | ZeroDivisionError |
| Documentación | manual oficial de una herramienta | |
| SSH | forma segura de entrar en un servidor remoto |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un traceback se lee de abajo arriba
La última línea es la que más importa. Dice el tipo de error y una frase corta.
Justo encima está el dónde: el archivo, el número de línea y el código que falló.
Si hay muchas líneas, sube desde abajo hasta la primera que nombra tu propio archivo. Ahí suele estar la causa.
Provoca un error y léelo
def average_ticket(amounts):
total = 0
for amount in amounts:
total = total + amount
return total / len(amounts)
# Los tickets del lunes, en euros.
print(average_ticket([4.5, 12.0, 7.25]))
# El martes la cafetería cerró: no hay tickets.
print(average_ticket([]))
Ejemplo resuelto: errores que verás a menudo
| Última línea | Qué significa | Qué miras primero |
|---|---|---|
| NameError: name 'totl' is not defined | Un nombre que no existe | Si está mal escrito |
| KeyError: 'status' | Esa clave no está en el diccionario | Las claves que sí llegan |
| IndexError: list index out of range | Esa posición no existe | Cuántos elementos hay |
| TypeError: can only concatenate str (not "int") to str | Mezclas texto y números | De qué tipo es cada valor |
| FileNotFoundError: No such file or directory | Ese archivo no está | La ruta y la carpeta actual |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente empieza a leer un traceback por arriba y se pierde. Lo importante está al final. Lee primero la última línea y después sube hasta la primera línea de tu propio código.
La documentación responde antes que nadie
Cuando no entiendes un error, busca el tipo y la frase tal cual. Quita tus datos, como nombres o rutas propias.
Prefiere la documentación oficial de la herramienta. Es la fuente más fiable y está al día.
En la terminal, casi todos los comandos tienen --help. Muestra sus opciones en unas líneas.
Lee la ayuda de un comando
# Casi todos los comandos explican sus opciones con --help.
grep --help 2>&1 | head -n 6
# Busca dentro de la ayuda la opción que ignora mayúsculas.
grep --help 2>&1 | grep -- '-i'
# Te toca: mira las primeras líneas de la ayuda de ls.
Una buena pregunta se responde rápido
Si te atascas, pregunta a tu equipo. Una buena pregunta tiene cuatro partes: qué querías, qué hiciste, el error exacto y qué has probado.
Muchos errores pasan en un servidor, no en tu portátil. Para llegar a él se usa SSH: abres una terminal en esa máquina y lees su registro.
Ejemplo resuelto: dos formas de preguntar
| Parte | Pregunta floja | Pregunta buena |
|---|---|---|
| Qué querías | No funciona | Quiero el importe medio de cada día |
| Qué hiciste | Nada | Ejecuté media.py con los tickets del martes |
| El error exacto | Sale algo rojo | ZeroDivisionError en la línea 5 |
| Qué has probado | Nada | Con los tickets del lunes funciona |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Encontrar el error en el servidor
# Desde tu portátil entras en el servidor de informes.
$ ssh [email protected]
lucia@informes:~$
# Ya estás dentro. Lees el final del registro del informe nocturno.
lucia@informes:~$ tail -n 4 /var/log/informes/nocturno.log
Traceback (most recent call last):
File "/opt/informes/media.py", line 5, in average_ticket
return total / len(amounts)
ZeroDivisionError: division by zero
# Sales del servidor y vuelves a tu portátil.
lucia@informes:~$ exit
Lo que espera quien te contrata
Consejo
Nadie espera que sepas todos los errores de memoria. Sí esperan que leas el mensaje, busques con calma y preguntes con datos. Eso es lo que se valora en las primeras semanas.