Saltar al contenido
🐍 Curso de Python
/

Módulo 0 · Lección 7 de 8

Entender los errores

Cómo se lee un mensaje de error de Python, qué significan los tipos más frecuentes y qué hacer paso a paso cuando algo falla.

⏱ 12 min de lectura

Vas a ver muchísimos errores. No son un síntoma de que lo estés haciendo mal: son la forma que tiene Python de explicarte qué ha encontrado raro. Quien programa bien no es quien no comete errores, sino quien los lee rápido y los arregla.

Anatomía de un error#

Ejecuta este programa, que falla a propósito:

fallo.py
numeros = [10, 20, 30]
print(numeros[5])
Salida en pantalla
Traceback (most recent call last):
  File "/Users/erwin/curso-python/fallo.py", line 2, in <module>
    print(numeros[5])
          ~~~~~~~^^^
IndexError: list index out of range

Parece intimidante, pero son solo cuatro piezas:

  1. Traceback (most recent call last). Una etiqueta fija que anuncia "aquí viene el recorrido del error". Ignórala.
  2. File ... line 2. Dónde ha ocurrido: el fichero y, sobre todo, la línea. Este es el dato que más rápido te lleva al problema.
  3. La línea de código y los símbolos ~~~^^^. Python te reproduce la línea culpable y te señala con acentos circunflejos el trozo exacto que ha fallado.
  4. La última línea: IndexError: list index out of range. El tipo de error y su explicación. Es lo más importante del mensaje entero.

Los errores que más vas a ver#

SyntaxError#

Has escrito algo que no es Python válido. El intérprete ni siquiera llega a ejecutar el programa.

python
print("hola"
Salida en pantalla
SyntaxError: '(' was never closed

Causas típicas: un paréntesis o una comilla sin cerrar, dos puntos olvidados al final de un if, o un = donde hacía falta ==. Mira también la línea anterior a la que te señala, porque un paréntesis abierto se arrastra hacia abajo.

NameError#

Usas un nombre que Python no conoce.

python
mensaje = "hola"
print(mensage)
Salida en pantalla
NameError: name 'mensage' is not defined. Did you mean: 'mensaje'?

Casi siempre es una errata o una mayúscula de más. Python moderno hasta te sugiere el nombre parecido.

TypeError#

Estás mezclando cosas que no se pueden mezclar.

python
edad = 30
print("Tengo " + edad + " años")
Salida en pantalla
TypeError: can only concatenate str (not "int") to str

Sumar un texto con un número no significa nada para Python. La solución la verás en el módulo de fundamentos: convertir el número a texto con str(edad), o usar cadenas formateadas.

IndentationError#

Los espacios del principio de la línea no cuadran.

python
if True:
print("dentro")
Salida en pantalla
IndentationError: expected an indented block after 'if' statement on line 1

Después de un : la línea siguiente debe ir desplazada a la derecha. Mezclar tabuladores y espacios provoca el mismo error, aunque a la vista todo parezca alineado: configura tu editor para usar solo espacios.

ValueError#

El tipo de dato es correcto, pero el valor concreto no sirve.

python
numero = int("hola")
Salida en pantalla
ValueError: invalid literal for int() with base 10: 'hola'

int() acepta textos, pero solo si contienen un número. Este error aparece muchísimo cuando pides datos al usuario y escribe cualquier cosa.

ModuleNotFoundError#

Intentas usar algo que no está instalado.

python
import django
Salida en pantalla
ModuleNotFoundError: No module named 'django'

Se arregla instalándolo con pip install django. En los módulos de Django y APIs lo veremos junto con los entornos virtuales, que es donde esto se complica y se explica bien.

El error silencioso#

Hay un fallo peor que todos los anteriores: el programa funciona pero da un resultado equivocado. No hay traceback, no hay pista.

python
total = 10 + 5
promedio = total / 3
print("El promedio es", promedio)

Se ejecuta sin quejarse, pero si los números eran dos y no tres, el resultado está mal. Para estos casos la herramienta es print: escribe valores intermedios en pantalla y comprueba si son los que esperabas.

python
total = 10 + 5
print("total vale:", total)
promedio = total / 3
print("promedio vale:", promedio)

Se llama depurar con prints, es lo que hace todo el mundo y no es ninguna vergüenza.

Qué hacer cuando te atascas#

Sigue este orden, sin saltarte pasos:

  1. Lee la última línea del error entera. No la mitad: entera.
  2. Ve a la línea que te indica y mírala con calma, junto a la anterior.
  3. Comprueba lo obvio: comillas y paréntesis cerrados, dos puntos al final, mayúsculas correctas, sangría consistente.
  4. Imprime los valores de las variables implicadas para ver qué contienen de verdad.
  5. Reduce el programa hasta el trozo mínimo que falla. A menudo, al hacerlo, encuentras el fallo tú solo.
  6. Busca el mensaje en internet, copiando el tipo de error y el texto, pero quitando tus nombres de fichero y de variables.