Guía de diagnóstico

IndentationError: cuando los bloques no tienen una sangría coherente

En Python la sangría forma parte de la estructura. El error puede significar que falta un bloque, sobra una indentación o dos líneas que deberían estar al mismo nivel usan espacios incompatibles.

Revisado 2026-09-30Ejemplos y diagnóstico

Distingue el mensaje antes de tocar espacios

expected an indented block

Python acaba de abrir un bloque y esperaba al menos una instrucción sangrada.

unexpected indent

Una línea está sangrada aunque no existe un bloque abierto que justifique ese nivel.

unindent does not match

El código vuelve a un nivel que no coincide con la estructura previa, a menudo por mezclar tabs y espacios.

bloques.py
if activo:
print("encendido")

Piensa en niveles, no en “poner espacios”

Cada if, bucle, función o bloque similar crea un nivel. Las instrucciones que pertenecen al mismo bloque deben alinearse. Al salir del bloque, vuelve exactamente al nivel anterior.

nivel 0  if usuario:
nivel 1      if usuario.es_admin:
nivel 2          mostrar_panel()
nivel 1      registrar_acceso()
nivel 0  continuar()

Evita el problema invisible de tabs y espacios

Configura el editor para insertar espacios de forma consistente. Si una línea parece alineada pero Python no está de acuerdo, muestra caracteres invisibles o vuelve a indentar el bloque completo.

Ejercicio mental: ¿a qué bloque pertenece?

Toma un if dentro de un for y, antes de ejecutar, etiqueta cada línea con nivel 0, 1 o 2. Si no puedes decidir el nivel, todavía no está clara la estructura del programa.

Señal de que ya lo entiendesPuedes provocar este error con un ejemplo mínimo, explicar qué supuesto se rompió y elegir una corrección que conserve la intención del programa.

Referencia técnica: documentación oficial de excepciones de Python.