Cómo leer los mensajes de error de Python y corregir tu código
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Cuando un principiante ve un mensaje de error en rojo, su primer impulso es entrar en pánico. La pantalla se llena de texto que asusta y piensa que ha roto algo grave. Pero la verdad es esta: los mensajes de error son tus mejores amigos. Te dicen exactamente qué salió mal y dónde.
Los programadores profesionales ven errores todos los días. La diferencia entre un principiante y un experto no es que los expertos eviten los errores, sino que saben leerlos. Cuando aprendes a leer los mensajes de error de Python, depurar pasa de ser aterrador a ser casi automático.
En esta lección aprenderás a leer un traceback (rastreo de errores) de Python, a entender los seis tipos de error más comunes y a armar tu propia caja de herramientas mental para corregir errores rápido.
Cómo leer un traceback de Python
Cuando Python encuentra un error, imprime un traceback: un informe que te cuenta qué pasó. La mayoría de la gente lee los tracebacks de arriba abajo. Es al revés. Empieza a leer siempre por la última línea.
Traceback (most recent call last): File "<exec>", line 5, in <module> File "<exec>", line 2, in greet TypeError: can only concatenate str (not "int") to str
Cuando ejecutas este código, Python muestra un traceback. Así se lee, empezando por abajo:
SyntaxError: Python no entiende tu código
Un SyntaxError significa que Python ni siquiera puede empezar a ejecutar tu código porque la estructura está mal. Es como una falta de gramática en español: la frase no tiene sentido. Python detecta estos errores antes de ejecutar una sola línea.
SyntaxError: expected ':' (<string>, line 1) Common SyntaxError causes: 1. Missing colon after if/else/for/while/def 2. Mismatched parentheses or quotes 3. Using = instead of == in conditions 4. Incorrect indentation
La buena noticia: los SyntaxError suelen ser los más fáciles de corregir. A menudo Python señala justo el problema con una pequeña flecha (^) que indica dónde se confundió.
if temperature > 30
print('Hot!')if temperature > 30:
print('Hot!')NameError: Python no encuentra ese nombre
Un NameError significa que usaste un nombre de variable o de función que Python no reconoce. Normalmente quiere decir que escribiste mal el nombre, que olvidaste definir la variable o que la usaste antes de asignarle un valor.
NameError: name 'usernme' is not defined NameError: name 'score' is not defined
total_price = 49.99
print(total_prce) # typo!total_price = 49.99
print(total_price)TypeError: tipo incorrecto para la operación
Un TypeError significa que intentaste hacer algo con un tipo de dato incorrecto. Por ejemplo, sumar una cadena de texto y un número, o llamar a algo que no es una función. Python entiende lo que le pides, pero los tipos no encajan.
TypeError: can only concatenate str (not "int") to str TypeError: can't multiply sequence by non-int of type 'str' TypeError: add() takes 2 positional arguments but 3 were given
Los TypeError aparecen a menudo al trabajar con la entrada del usuario (que siempre es una cadena) o cuando una función devuelve None sin que lo esperes.
age = 25
print('You are ' + age + ' years old')age = 25
print(f'You are {age} years old')IndexError y KeyError: acceder a cosas que no existen
Un IndexError ocurre cuando intentas acceder a una posición de una lista que no existe. Un KeyError ocurre cuando intentas acceder a una clave de un diccionario que no existe. Los dos significan que buscas algo que no está ahí.
IndexError: list index out of range List length: 3 Valid indices: 0 to 2 KeyError: 'email'
En los diccionarios, puedes evitar el KeyError con el método .get(), que devuelve un valor predeterminado en lugar de detener el programa.
user = {'name': 'Alice'}
email = user['email'] # KeyError!user = {'name': 'Alice'}
email = user.get('email', 'Not provided')
print(email) # Not providedValueError: tipo correcto, valor incorrecto
Un ValueError significa que el tipo es correcto, pero el valor en sí no tiene sentido para la operación. El ejemplo clásico: intentar convertir en entero una cadena que no es un número.
ValueError: invalid literal for int() with base 10: 'hello' ValueError: invalid literal for int() with base 10: '3.14' Converted: 3
Los ValueError aparecen con frecuencia al procesar la entrada del usuario. Alguien puede escribir "veinte" en lugar de "20", o dejar un campo vacío. Valida siempre la entrada antes de convertirla.
"abc" is not a valid number
Consejos básicos para depurar
Aquí tienes una guía rápida para depurar código Python. Estas técnicas sirven para cualquier tipo de error.
Esta es una referencia rápida de los errores que te encontrarás más a menudo:
| Error | Qué significa | Solución rápida |
|---|---|---|
SyntaxError | La estructura del código está mal | Revisa los dos puntos, los paréntesis y las comillas |
NameError | No se encuentra la variable o la función | Revisa cómo está escrita y defínela antes de usarla |
TypeError | Tipo de dato incorrecto | Convierte los tipos o revisa los argumentos de la función |
IndexError | Índice de lista fuera de rango | Revisa la longitud de la lista; los índices empiezan en 0 |
KeyError | No se encuentra la clave del diccionario | Usa .get() o comprueba que la clave existe |
ValueError | Tipo correcto, valor incorrecto | Valida los datos antes de convertirlos |
Ejercicios de práctica
¡Es hora de practicar la depuración! La mayoría de estos ejercicios te dan código roto para que lo arregles. Lee el mensaje de error, encuentra el fallo y corrígelo.
Este código tiene un SyntaxError. Encuéntralo y corrígelo para que imprima:
Python is fun!
Let's learn more.Este código tiene un NameError. Encuentra el nombre mal escrito y corrígelo para que imprima:
Hello, Alice! You have 3 new messages.Este código tiene un TypeError. Corrígelo para que imprima:
Your total is $37.5Este código intenta imprimir el último color, pero falla con un IndexError. Corrígelo para que imprima:
Last color: greenEste código falla al intentar convertir en entero una cadena con un precio. Corrígelo para que imprima:
Price in cents: 999El precio es "9.99" dólares y queremos pasarlo a centavos (multiplicar por 100 y redondear a un entero).
Este código tiene TRES errores (uno por sección). Corrígelos todos para que la salida sea:
Student: Alice
Grade: 85
Passed: TrueResumen: mensajes de error de Python
Esta es tu referencia rápida de los errores más comunes de Python:
| Error | Significado | Qué revisar primero |
|---|---|---|
SyntaxError | Estructura de código incorrecta | Dos puntos, paréntesis o comillas que faltan |
NameError | Variable desconocida | Cómo está escrita, orden de definición |
TypeError | Tipo incorrecto | Revisa los tipos con type() |
IndexError | Índice de lista no válido | Longitud de la lista, índices desde 0 |
KeyError | Clave de diccionario no válida | Usa .get() con un valor predeterminado |
ValueError | Valor incorrecto | Valida antes de convertir |
Las reglas de oro de la depuración:
print(type(x), x) para inspeccionar las variables sospechosas¿Qué sigue?
Ahora que sabes leer los mensajes de error, ya puedes abordar con confianza temas más complejos de Python. Continúa con [Listas en Python](/python/python-lists) para conocer una de las estructuras de datos más potentes y versátiles de Python.