Volver al blog

Errores comunes en Python para principiantes y cómo solucionarlos

Errores comunes en Python para principiantes y cómo solucionarlos

Los errores comunes en Python para principiantes casi siempre son los mismos: la indentación mal hecha, olvidar los dos puntos, mezclar texto y números (porque input() siempre devuelve texto), escribir decimales con coma, confundir = con == y usar el resultado de una función que no devuelve nada. La buena noticia es que Python te dice qué ha pasado y en qué línea. Solo hay que aprender a leer el mensaje.

Debajo tienes cómo leer un error de Python, los diez fallos que más vemos en alumnos que empiezan, con el mensaje exacto que aparece en pantalla, y cómo dejar de repetirlos.

Primero: cómo leer un traceback

Cuando algo falla, Python muestra un bloque de texto que asusta más de lo que debería:

Traceback (most recent call last):
  File "notas.py", line 3, in <module>
    print(edad + 1)
          ~~~~~^~~
TypeError: can only concatenate str (not "int") to str

Se lee de abajo arriba:

  1. La última línea dice el tipo de error (TypeError) y qué ha pasado. Es lo más importante.
  2. Encima está la línea de código que ha fallado, con unas marcas (^ y ~) que señalan la parte exacta.
  3. Más arriba, el fichero y el número de línea. Si el error ocurre dentro de una función, verás varias de estas entradas: la de más abajo es donde explotó y las de arriba, el camino que llevó hasta ahí.

Antes de buscar en Google, traduce la última línea. Muchas veces la solución está escrita en ella. Y usa una versión reciente de Python (3.10 o superior): los mensajes son mucho más claros e incluso sugieren la corrección.

Los errores en un vistazo

Mensaje Qué suele significar
IndentationError: expected an indented block Falta sangría después de un if, for, def...
IndentationError: unexpected indent Hay sangría donde no toca
TabError: inconsistent use of tabs and spaces Has mezclado tabuladores y espacios
SyntaxError: expected ':' Faltan los dos puntos al final del if, for, def...
TypeError: can only concatenate str (not "int") to str Sumas texto y número; muchas veces viene de input()
ValueError: could not convert string to float: '6,5' Has escrito un decimal con coma
SyntaxError: invalid syntax. Maybe you meant '=='... Has usado = para comparar
TypeError: ... 'NoneType' and 'int' Usas el resultado de una función que no tiene return
IndexError: list index out of range Te sales de la lista
NameError: name '...' is not defined Variable mal escrita, no creada o texto sin comillas

1. La indentación

En otros lenguajes los bloques se marcan con llaves y la sangría es estética. En Python, la sangría es la sintaxis: indica qué líneas van dentro del if, del bucle o de la función.

if nota >= 5:
print("Aprobado")
# IndentationError: expected an indented block after 'if' statement on line 1
total = 0
    total = total + 1
# IndentationError: unexpected indent

Y la versión más frustrante, porque en pantalla se ve todo perfecto:

TabError: inconsistent use of tabs and spaces in indentation

Pasa al copiar código de internet o de un PDF, o al cambiar de editor. Unas líneas están sangradas con tabulador y otras con espacios. La solución es configurar el editor para que inserte 4 espacios al pulsar Tab (VS Code, PyCharm y Thonny lo hacen por defecto) y volver a sangrar las líneas problemáticas.

2. Olvidar los dos puntos

if edad >= 18
    print("Mayor de edad")
# SyntaxError: expected ':'

Todas las líneas que abren un bloque terminan en :: if, elif, else, for, while, def, class, try, except. Si vienes de Java o C, es lo que más se te olvida la primera semana.

3. input() siempre devuelve texto

Es el error número uno en los primeros ejercicios:

edad = input("¿Cuántos años tienes? ")
print(edad + 1)
# TypeError: can only concatenate str (not "int") to str

Aunque el usuario escriba 17, input() devuelve el texto "17", no el número 17. Y Python no convierte tipos por su cuenta. Hay que hacerlo tú:

edad = int(input("¿Cuántos años tienes? "))
print(edad + 1)  # 18

Si no conviertes, a veces no hay error pero el resultado es incorrecto, que es peor. Comparando textos, "9" > "10" es True, porque se compara carácter a carácter y "9" va después de "1". Si un programa de notas te dice que un 9 es mayor que un 10, el problema es este.

4. La coma decimal

Este no lo encontrarás en las listas en inglés, pero en España lo vemos constantemente. En Python los decimales se escriben con punto:

nota = 6,5
print(nota + 1)
# TypeError: can only concatenate tuple (not "int") to tuple

6,5 no da error al escribirlo: Python lo entiende como una tupla de dos números, (6, 5). El fallo aparece después, en otra línea, con un mensaje que no parece tener nada que ver. Se escribe nota = 6.5.

Y cuando es el usuario quien escribe la coma:

nota = float(input("Nota: "))  # el usuario escribe 6,5
# ValueError: could not convert string to float: '6,5'

Si tu programa lo va a usar gente que escribe con coma, cámbiala antes de convertir:

nota = float(input("Nota: ").replace(",", "."))

5. Confundir = con ==

if nota = 10:
    print("Matrícula")
# SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

= guarda un valor en una variable. == compara dos valores. Las versiones recientes de Python te lo dicen directamente en el mensaje.

6. Usar print en lugar de return

def sumar(a, b):
    print(a + b)

resultado = sumar(2, 3) + 1
# TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

La función muestra 5 por pantalla, pero no devuelve nada. Una función sin return devuelve None, y no puedes sumar 1 a None. Mostrar un valor y devolverlo son cosas distintas: print es para el usuario, return es para el resto del programa.

Una variante muy parecida:

compra = ["pan"]
compra = compra.append("leche")
compra.append("huevos")
# AttributeError: 'NoneType' object has no attribute 'append'

append, sort, reverse y otros métodos de listas modifican la lista directamente y devuelven None. Al escribir compra = compra.append(...) sustituyes tu lista por None. Se escribe solo compra.append("leche").

Cada vez que veas NoneType en un error, pregúntate: ¿de qué función viene este valor, y tiene return?

7. Salirse de la lista

notas = [7, 5, 9]
print(notas[3])
# IndexError: list index out of range

Una lista de 3 elementos tiene índices 0, 1 y 2. El error típico aparece en bucles escritos a mano:

for i in range(len(notas) + 1):  # se sale en la última vuelta
    print(notas[i])

En Python casi nunca necesitas índices para recorrer una lista. Recorre los elementos directamente:

for nota in notas:
    print(nota)

Y recuerda que range(1, 10) va del 1 al 9: el final nunca se incluye.

8. NameError: la variable no existe

nombre = "Lucía"
print(nombr)
# NameError: name 'nombr' is not defined. Did you mean: 'nombre'?

Las tres causas habituales son una errata (Python distingue mayúsculas: Nombre y nombre son variables distintas), una variable que solo se crea dentro de un if que no se ha ejecutado, o un texto al que le faltan las comillas:

print(Hola)
# NameError: name 'Hola' is not defined

Sin comillas, Python cree que Hola es el nombre de una variable.

9. Llamar a tu archivo como un módulo de Python

Haces un ejercicio de dados, lo guardas como random.py y escribes:

import random
print(random.randint(1, 6))

Python importa tu archivo en lugar del módulo random de verdad, y como tu archivo no tiene randint, falla con un AttributeError. En Python 3.13 el mensaje ya te dice que cambies el nombre del archivo; en versiones anteriores habla de un "partially initialized module", que despista bastante más. Pasa igual con turtle.py, math.py o csv.py. No llames a tus archivos como los módulos que vas a usar, y si ya lo has hecho, borra también la carpeta __pycache__ que se habrá creado al lado.

10. Modificar una lista mientras la recorres

numeros = [1, 2, 2, 3, 4]
for n in numeros:
    if n % 2 == 0:
        numeros.remove(n)
print(numeros)  # [1, 2, 3]  ← el 2 sigue ahí

No hay mensaje de error, y por eso es tan difícil de ver. Al borrar un elemento, todos los siguientes se desplazan una posición y el bucle se salta el que viene después. La solución es crear una lista nueva con lo que quieres conservar:

numeros = [n for n in numeros if n % 2 != 0]

Un error que no es donde dice

Una más, porque confunde a todo el mundo: a veces Python marca un error en una línea que está perfecta. Casi siempre el problema está en la línea anterior, normalmente un paréntesis, corchete o comilla sin cerrar. Las versiones recientes lo detectan mejor:

print("Hola"
x = 2
# SyntaxError: '(' was never closed

Si la línea marcada te parece correcta, mira la de arriba.

Cómo dejar de repetirlos

Apunta la causa, no el mensaje. Lleva una lista con cada error que te cueste más de diez minutos. No escribas "TypeError"; escribe "sumé el resultado de input() sin convertirlo". En unas semanas verás que tus errores se reducen a tres o cuatro causas.

Prueba código pequeño antes de meterlo en el programa. Abre la consola interactiva de Python y comprueba qué devuelve input(), qué vale 6,5 o qué hace compra.append(). Diez segundos de prueba te ahorran media hora buscando.

Visualiza la ejecución. Herramientas como Python Tutor (pythontutor.com) o el depurador de Thonny y VS Code te enseñan, paso a paso, qué vale cada variable en cada momento. Para errores sin mensaje, como el de la lista que se salta elementos, es la forma más rápida de verlo. El método completo está en cómo depurar código paso a paso.

No tapes errores con try/except. Rodear el código de un try que no hace nada consigue que el error desaparezca de la pantalla, pero no del programa. Primero entiende por qué falla; después decide si tiene sentido capturarlo.

Si estás empezando desde cero, esta lista encaja con la ruta de cómo aprender programación desde cero. Y si estudias ASIR o ASIX y además de Python os piden Bash, tienes los fallos equivalentes en scripts de Bash en ASIR: ejercicios y errores típicos.

Cuándo pedir ayuda

Equivocarse es normal; lo que importa es si consigues salir solo. Merece la pena buscar a alguien cuando:

  • Llevas más de una tarde con el mismo error y ya has probado cambios al azar.
  • Entiendes los ejemplos de clase pero te bloqueas al enfrentarte a un enunciado nuevo.
  • Copias soluciones que funcionan y no sabrías explicar por qué.
  • Tienes un examen o una entrega cerca y Python es lo que te está frenando.

En nuestras clases particulares de Python trabajamos sobre tu propio código: lo ejecutamos, leemos juntos el error y lo arreglas tú, para que la próxima vez sepas hacerlo sin ayuda. Son online, uno a uno, a 25 € la hora y sin matrícula ni permanencia.

Preguntas frecuentes

¿Cuál es el error más común en Python?

En principiantes, los de indentación y los de tipos. Los de indentación porque Python es de los pocos lenguajes en los que la sangría forma parte de la sintaxis. Los de tipos porque input() siempre devuelve texto y Python no lo convierte a número por su cuenta.

¿Qué diferencia hay entre un SyntaxError y los demás errores?

Un SyntaxError (y sus variantes IndentationError y TabError) aparece antes de ejecutar nada: Python no entiende cómo está escrito el código y no lo arranca. Los demás, como TypeError, NameError o IndexError, aparecen mientras el programa se ejecuta, así que las líneas anteriores sí se han ejecutado.

¿Por qué mi programa no da error pero el resultado está mal?

Porque Python solo protesta cuando algo es imposible, no cuando es incorrecto. Comparar dos textos como si fueran números, borrar elementos mientras recorres una lista o escribir un range que se queda corto son instrucciones válidas que hacen otra cosa de la que pensabas. Para esos casos, usa print para ver los valores intermedios o un depurador.

¿Se puede usar ChatGPT para arreglar errores de Python?

Para que te explique qué significa un mensaje, sí, y suele hacerlo bien. Pero si le pegas el código y copias la versión corregida, el error desaparece sin que entiendas por qué y lo vas a repetir en el examen. Pídele la causa, no la solución, y arréglalo tú.

¿Python es buen lenguaje para empezar si cometo tantos errores?

Sí. Que cometas estos errores es normal, y Python tiene de los mensajes de error más claros que hay. Casi todos los de esta lista desaparecen en pocas semanas de práctica. Si te pasa en la universidad, en asignaturas como Fundamentos de Programación, aquí tienes las asignaturas más difíciles de Ingeniería Informática y cómo aprobarlas.

WhatsApp