[¡Imprescindible para principiantes de Python!] No temas al IndentationError: Un ex-novato explica las causas y soluciones rápidas
¡Hola a todos! Basado en mi experiencia lanzando dos sitios web en un mes y medio con la ayuda de la IA, a pesar de no tener conocimientos de programación hace solo unos meses, explico los puntos en los que los principiantes suelen tropezar.
Al empezar a aprender Python, uno de los primeros mensajes de error en rojo que muchas personas encuentran... De entre ellos, el que probablemente te hace rascarte la cabeza pensando "¿Eh, por qué? ¿Dónde me equivoqué?" es el IndentationError que explicaremos hoy.
A mí también me pasó al principio. Una vez perdí horas por un solo espacio y llegué a pensar: "Quizás la programación no es para mí...". Pero no te preocupes. Después de leer este artículo, el IndentationError ya no te dará miedo. La causa es sorprendentemente simple, y una vez que la entiendes, nunca más te quedarás atascado.
En este artículo, basándome en mis propias experiencias de tropiezos, explicaré a fondo las causas y soluciones del error desde la "perspectiva de un compañero principiante", así como medidas preventivas para que nunca más tengas que lidiar con este error. He preparado un montón de código que funciona con solo copiar y pegar, ¡así que experimentemos juntos ese "¡Funciona!"!
Para empezar, ¿por qué Python es tan estricto con la sangría?
Si alguna vez has visto otros lenguajes de programación (como JavaScript o C), podrías preguntarte: "¿Por qué solo Python da errores por la sangría (indentación)?"
En muchos lenguajes, los "bloques" de código se encierran entre { } (llaves). Así:
// Este es un ejemplo de JavaScript
if (x > 10) {
console.log("x es mayor que 10.");
console.log("Esta línea también está en el mismo bloque.");
}
Con { }, es evidente dónde empieza y termina el bloque de if. El programa funcionará incluso si la sangría es un desastre.
Por otro lado, la filosofía de diseño de Python es que "un código legible es un buen código". Para asegurar que el código escrito por cualquiera se vea limpio y fácil de leer, Python adoptó la regla de usar la sangría en lugar de { } para representar los bloques de código.
En otras palabras, para Python, la sangría no es solo una cuestión de apariencia; es la propia sintaxis la que determina la estructura del código.
Un bloque de código que sigue a los dos puntos (:) y está sangrado un nivel más profundo. Esta es la señal de un "bloque" en Python.
# Este es un ejemplo de Python
age = 20
if age >= 20:
# Esta parte está sangrada, por lo que es el "bloque" del if
print("Eres mayor de edad.")
print("Puedes beber y fumar.")
# Esta parte no está sangrada, así que está fuera del if
print("Terminando el programa.")
Las 3 causas más comunes de IndentationError y un manual de solución completo
Ahora, veamos las tres causas más comunes de IndentationError y sus respectivas soluciones.
Causa 1: Sangría insuficiente (expected an indented block)
Este es Python diciéndote: "¡Aquí se necesita un bloque con sangría!". Después de una línea que termina con dos puntos (:), como en if, for, def, o class, siempre se necesita sangría.
Error común 👎
# Código que causará un error
name = "Taro"
if name == "Taro":
print("¡Hola, Taro!") # La línea después del if no tiene sangría
Ejecutar esto resultará en un IndentationError: expected an indented block.
Solución 👍
Sangra la línea después de los dos puntos (:) con cuatro espacios. La mayoría de los editores están configurados para insertar automáticamente cuatro espacios al presionar la tecla Tab una vez.
Simplemente memoriza el mantra: "Después de dos puntos, sangría."
# Código que funciona correctamente
name = "Taro"
if name == "Taro":
# Sangría con cuatro espacios
print("¡Hola, Taro!")
Causa 2: Demasiada sangría (unexpected indent)
Este es el caso opuesto al anterior, la forma en que Python dice: "Aquí no necesito una sangría...". Este error ocurre cuando agregas una sangría sin ninguna razón.
Error común 👎
# Código que causará un error
print("Iniciando proceso.")
print("Esta línea está sangrada por alguna razón.") # Sangría innecesaria
print("Terminando proceso.")
Ejecutar esto resultará en un IndentationError: unexpected indent.
Solución 👍
La sangría se usa solo para marcar el comienzo de un bloque, como en una declaración if o for. En todos los demás lugares, comienza tu código al principio de la línea.
Es más fácil de entender si piensas: "Mantén las declaraciones del mismo nivel en la misma columna."
# Código que funciona correctamente
print("Iniciando proceso.")
print("Esta línea no está sangrada.") # Se eliminó la sangría
print("Terminando proceso.")
Causa 3: Mezcla de espacios y tabuladores (tab error)
Este es el "enemigo invisible" más problemático para los principiantes. Aunque las líneas parezcan tener la misma sangría, Python se confunde y lanza un error si una línea está sangrada con "cuatro espacios" y otra con "una tecla de tabulación".
Esto sucede a menudo cuando copias y pegas código de la web. Yo mismo he perdido mucho tiempo con esto...
Solución 👍
Para resolver este problema, es crucial visualizar primero al "enemigo". Tu editor de código (como Visual Studio Code) tendrá una función para mostrar espacios y tabuladores como símbolos.
Por ejemplo, en VS Code, puedes seleccionar "Renderizar espacios en blanco" en el menú "Ver" o establecer "editor.renderWhitespace": "all" en tu configuración. Esto mostrará los espacios como puntos (·) y los tabuladores como flechas (→).
(La imagen es para visualizar los espacios en blanco)
Una vez visualizado, encuentra dónde se mezcla la sangría y unifica todo a "cuatro espacios". Muchos editores también tienen una función para convertir todos los tabuladores de un archivo en espacios a la vez.
La guía de estilo oficial de Python (PEP 8) también recomienda encarecidamente usar cuatro espacios para la sangría. A menos que tengas una razón específica para no hacerlo, debes seguir esta regla.
# Forma recomendada
def my_function():
# Esta sangría es de cuatro espacios
print("Esto está sangrado con cuatro espacios.")
if True:
# Esta sangría es de ocho espacios (4 * 2)
print("Anidar agrega otros cuatro espacios.")
[Aprendizaje en la era de la IA] Consejos para consultar a la IA sobre IndentationError
Cuando obtienes un error, consultar a una IA como ChatGPT es un método muy eficaz. Lo uso a diario. Sin embargo, la calidad de la respuesta que obtienes puede cambiar drásticamente dependiendo de cómo preguntes.
Ejemplo de mala pregunta 👎
Tengo un IndentationError. Arréglalo.
Con esto, la IA carece de información y solo puede dar una respuesta genérica.
Ejemplo de buena pregunta (Prompt) 👍
Cuando ejecuto el siguiente código de Python, obtengo un error `IndentationError: expected an indented block`.
1. ¿Cuál es la causa del error?
2. Por favor, muéstrame el código completo corregido y explica qué línea arreglar y cómo.▼ Código que causa el error
# Pega tu código aquí name = "Taro" if name == "Taro": print("¡Hola, Taro!")
Al proporcionar estas tres cosas juntas:
- El mensaje de error específico
- Todo el código que causa el error
- Lo que quieres saber (la causa y la solución)
la IA puede entender con precisión tu situación y darte una solución precisa. Usemos la IA como un excelente tutor personal.
¡No más errores! Una solución permanente para los errores de sangría
Finalmente, presentaré la medida preventiva más poderosa para evitar obtener un IndentationError en primer lugar.
Es instalar un formateador de código.
Python tiene herramientas como `Black` y `autopep8` que formatean automáticamente tu código para cumplir con las directrices de PEP 8 cada vez que guardas.
Si configuras esto en tu editor de código, las inconsistencias en la sangría y la mezcla de espacios/tabuladores se corregirán automáticamente en el momento en que guardes el archivo. Te liberarás por completo de la molestia de arreglar manualmente la sangría y podrás concentrarte únicamente en tu lógica.
Puedes encontrar muchos artículos que explican cómo configurarlo buscando cosas como "configuración de Black en VSCode". Este esfuerzo único te ahorrará docenas de horas de desarrollo en el futuro.
Conclusión: La sangría es la "etiqueta" de Python
En este artículo, expliqué las causas y soluciones para el IndentationError, compartiendo mis experiencias personales.
- La sangría de Python es la sintaxis que define la estructura del código.
- Las causas principales son "insuficiente", "excesiva" y "mezcla de espacios y tabuladores".
- Recuerda "sangrar después de dos puntos" y "mantener el mismo nivel en la misma columna".
- Visualiza los espacios en blanco en tu editor para encontrar al "enemigo invisible".
- La medida preventiva definitiva es instalar un formateador de código.
La sangría es como la "etiqueta" del lenguaje Python. Puede parecer un poco restrictivo al principio, pero al acostumbrarte a esta etiqueta, podrás escribir código hermoso, fácil de leer y mantenible.
Al superar este error, has dado otro paso en tu camino para convertirte en un maestro de Python. ¡Sigamos aprendiendo juntos!
Próximos pasos
Una vez que domines la sangría, el siguiente error común que encontrarás es un `SyntaxError`, que es un error en la propia gramática. Aprendamos sobre patrones comunes como olvidar cerrar un paréntesis o agregar dos puntos, y cómo solucionarlos.
→ Leer el siguiente artículo: Errores comunes y soluciones para SyntaxError