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.
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.
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.
Referencia técnica: documentación oficial de excepciones de Python.