Errores en Python: aprende a leer el traceback y encontrar la causa
Un traceback no es una pared de texto: contiene una ruta, una línea y un mensaje. Aprende a extraer esas tres pistas antes de cambiar código al azar.
Empieza por la última línea; después vuelve a tu código
La última línea suele decir qué tipo de excepción ocurrió y aporta un mensaje. Las líneas anteriores muestran la cadena de llamadas. Cuando hay código de librerías y código tuyo mezclados, localiza primero el marco que pertenece a tu archivo.
Traceback (most recent call last):
File "pedido.py", line 8, in <module>
total = precio + " €"
~~~~~~~^~~~~~~
TypeError: unsupported operand type(s) for +: 'int' and 'str'¿En qué familia cae el problema?
El nombre de la excepción reduce drásticamente el espacio de búsqueda.
El programa no empieza
SyntaxError o IndentationError: revisa estructura, delimitadores, dos puntos y bloques.
Python no encuentra algo
NameError, ModuleNotFoundError o FileNotFoundError: comprueba nombres, entorno y rutas.
El valor existe, pero no encaja
TypeError, ValueError o AttributeError: inspecciona tipo, valor y operación.
Una colección no contiene lo pedido
KeyError e IndexError: comprueba clave, índice, longitud y supuestos sobre los datos.
El cálculo tiene un caso límite
ZeroDivisionError: localiza de dónde sale el divisor y qué debería significar el caso cero.
El ámbito cambia el significado de un nombre
UnboundLocalError: sigue asignaciones dentro de funciones y distingue nombres locales de externos.
Busca el nombre exacto de la excepción
Cada guía usa un diagnóstico distinto porque la causa probable cambia con la excepción.
El protocolo de 5 minutos cuando te bloqueas
- Copia la última línea del traceback y nombra la excepción.
- Busca la primera línea de tu código implicada en la traza.
- Inspecciona los valores que participan: contenido, tipo, longitud o ruta según el caso.
- Reduce el ejemplo hasta que el mismo error aparezca con el mínimo código posible.
- Cambia una hipótesis y vuelve a ejecutar. Si el error cambia, has obtenido información nueva.