Saltar al contenido
Editor

Cómo leer los mensajes de error de Python y corregir tu código

Principiante20 min6 ejercicios75 XP

Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción

0/6 ejercicios

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.

Código que produce un traceback
def greet(name):
message = 'Hello, ' + name
return message
result = greet(42)
Salida
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.

Causas comunes de SyntaxError
# Missing colon after if
try:
exec('if True\n print("hello")')
except SyntaxError as e:
print(f'SyntaxError: {e}')
# These are the most common causes:
print('Common SyntaxError causes:')
print('1. Missing colon after if/else/for/while/def')
print('2. Mismatched parentheses or quotes')
print('3. Using = instead of == in conditions')
print('4. Incorrect indentation')
Salida
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ó.

Con error: faltan los dos puntos
if temperature > 30
    print('Hot!')
Corregido: con los dos puntos
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.

Ejemplos comunes de NameError
# Typo in variable name
username = 'Alice'
try:
print(usernme) # Oops - misspelled!
except NameError as e:
print(f'NameError: {e}')
# Using a variable before defining it
try:
print(score)
score = 100
except NameError as e:
print(f'NameError: {e}')
Salida
NameError: name 'usernme' is not defined
NameError: name 'score' is not defined
Con error: nombre de variable mal escrito
total_price = 49.99
print(total_prce)  # typo!
Corregido: nombre bien escrito
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.

Ejemplos comunes de TypeError
# Can't add string and integer
try:
result = 'Age: ' + 25
except TypeError as e:
print(f'TypeError: {e}')
# Can't multiply string by string
try:
result = 'hello' * 'world'
except TypeError as e:
print(f'TypeError: {e}')
# Wrong number of arguments
def add(a, b):
return a + b
try:
add(1, 2, 3)
except TypeError as e:
print(f'TypeError: {e}')
Salida
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.

Con error: mezclar cadena e int
age = 25
print('You are ' + age + ' years old')
Corregido: usa una f-string o str()
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í.

Ejemplos de IndexError y KeyError
# IndexError - list index out of range
fruits = ['apple', 'banana', 'cherry']
try:
print(fruits[5]) # Only indices 0, 1, 2 exist!
except IndexError as e:
print(f'IndexError: {e}')
print(f'List length: {len(fruits)}')
print(f'Valid indices: 0 to {len(fruits) - 1}')
# KeyError - dictionary key doesn't exist
user = {'name': 'Alice', 'age': 25}
try:
print(user['email']) # This key doesn't exist!
except KeyError as e:
print(f'KeyError: {e}')
Salida
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.

Falla con KeyError
user = {'name': 'Alice'}
email = user['email']  # KeyError!
Seguro con .get()
user = {'name': 'Alice'}
email = user.get('email', 'Not provided')
print(email)  # Not provided

ValueError: 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.

Ejemplos comunes de ValueError
# Can't convert "hello" to an integer
try:
number = int('hello')
except ValueError as e:
print(f'ValueError: {e}')
# Can't convert a decimal string with int()
try:
number = int('3.14')
except ValueError as e:
print(f'ValueError: {e}')
# This works - go through float first
number = int(float('3.14'))
print(f'Converted: {number}')
Salida
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.

Manejar ValueError con try/except
# Safe conversion pattern
user_input = 'abc'
try:
age = int(user_input)
print(f'Your age is {age}')
except ValueError:
print(f'\"{user_input}\" is not a valid number')
Salida
"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:

ErrorQué significaSolución rápida
SyntaxErrorLa estructura del código está malRevisa los dos puntos, los paréntesis y las comillas
NameErrorNo se encuentra la variable o la funciónRevisa cómo está escrita y defínela antes de usarla
TypeErrorTipo de dato incorrectoConvierte los tipos o revisa los argumentos de la función
IndexErrorÍndice de lista fuera de rangoRevisa la longitud de la lista; los índices empiezan en 0
KeyErrorNo se encuentra la clave del diccionarioUsa .get() o comprueba que la clave existe
ValueErrorTipo correcto, valor incorrectoValida 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.

Ejercicio 1: corrige el SyntaxError
Corrige el error

Este código tiene un SyntaxError. Encuéntralo y corrígelo para que imprima:

Python is fun!
Let's learn more.
message = 'Python is fun!'
print(message
print('Let\'s learn more.')
Ejercicio 2: corrige el NameError
Corrige el error

Este código tiene un NameError. Encuentra el nombre mal escrito y corrígelo para que imprima:

Hello, Alice! You have 3 new messages.
user_name = 'Alice'
message_count = 3
print(f'Hello, {user_name}! You have {mesage_count} new messages.')
Ejercicio 3: corrige el TypeError
Corrige el error

Este código tiene un TypeError. Corrígelo para que imprima:

Your total is $37.5
price = 12.5
quantity = '3'
total = price * quantity
print(f'Your total is ${total}')
Ejercicio 4: corrige el IndexError
Corrige el error

Este código intenta imprimir el último color, pero falla con un IndexError. Corrígelo para que imprima:

Last color: green
colors = ['red', 'blue', 'green']
last_index = len(colors)
print(f'Last color: {colors[last_index]}')
Ejercicio 5: corrige el ValueError
Corrige el error

Este código falla al intentar convertir en entero una cadena con un precio. Corrígelo para que imprima:

Price in cents: 999

El precio es "9.99" dólares y queremos pasarlo a centavos (multiplicar por 100 y redondear a un entero).

price_str = '9.99'
price_cents = int(price_str) * 100
print(f'Price in cents: {price_cents}')
Ejercicio 6: corrige todos los errores
Corrige el error

Este código tiene TRES errores (uno por sección). Corrígelos todos para que la salida sea:

Student: Alice
Grade: 85
Passed: True
# Bug 1: Something wrong with the variable name
student_name = 'Alice'
print(f'Student: {student_Name}')
# Bug 2: Something wrong with the type
grade = '85'
print(f'Grade: {grade + 0}')
# Bug 3: Something wrong with the comparison
passed = grade >= 60
print(f'Passed: {passed}')

Resumen: mensajes de error de Python

Esta es tu referencia rápida de los errores más comunes de Python:

ErrorSignificadoQué revisar primero
SyntaxErrorEstructura de código incorrectaDos puntos, paréntesis o comillas que faltan
NameErrorVariable desconocidaCómo está escrita, orden de definición
TypeErrorTipo incorrectoRevisa los tipos con type()
IndexErrorÍndice de lista no válidoLongitud de la lista, índices desde 0
KeyErrorClave de diccionario no válidaUsa .get() con un valor predeterminado
ValueErrorValor incorrectoValida antes de convertir

Las reglas de oro de la depuración:

  • Lee siempre primero la última línea del traceback
  • Revisa el número de línea que te da Python (y la línea anterior)
  • Usa print(type(x), x) para inspeccionar las variables sospechosas
  • Los mensajes de error son aliados, no enemigos: te dicen exactamente qué salió mal
  • ¿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.

    Tutoriales relacionados

    ¿Te sirvió este tutorial?

    Sugerir una mejora