Solución:
Como indica el mensaje de error, tiene un error de sangría. Probablemente se deba a una combinación de tabulaciones y espacios.
De hecho, hay varias cosas que necesita saber sobre la sangría en Python:
Python realmente se preocupa por la sangría.
En muchos otros idiomas, la sangría no es necesaria pero mejora la legibilidad. En Python, la sangría reemplaza la palabra clave begin / end
o { }
y por tanto es necesario.
Esto se verifica antes de la ejecución del código, por lo tanto, incluso si nunca se alcanza el código con el error de sangría, no funcionará.
Hay diferentes errores de sangría y leerlos ayuda mucho:
1. “IndentationError: se esperaba un bloque con sangría”
Son dos razones principales por las que podría tener un error de este tipo:
– Tiene un “:” sin un bloque con sangría detrás.
A continuación, se muestran dos ejemplos:
Ejemplo 1, sin bloque con sangría:
Aporte:
if 3 != 4:
print("usual")
else:
Producción:
File "<stdin>", line 4
^
IndentationError: expected an indented block
La salida indica que debe tener un bloque con sangría en la línea 4, después de la else:
declaración
Ejemplo 2, bloque sin sangría:
Aporte:
if 3 != 4:
print("usual")
Producción
File "<stdin>", line 2
print("usual")
^
IndentationError: expected an indented block
La salida indica que debe tener una línea de bloque 2 con sangría, después de la if 3 != 4:
declaración
– Está utilizando Python2.xy tiene una combinación de pestañas y espacios:
Aporte
def foo():
if 1:
print 1
Tenga en cuenta que antes de si hay una pestaña, y antes de imprimir hay 8 espacios.
Producción:
File "<stdin>", line 3
print 1
^
IndentationError: expected an indented block
Es bastante difícil entender lo que está sucediendo aquí, parece que hay un bloque de sangría … Pero como dije, he usado tabulaciones y espacios, y nunca deberías hacer eso.
- Puede obtener información aquí.
- Quite todas las pestañas y reemplácelas por cuatro espacios.
- Y configure su editor para que lo haga automáticamente.
2. “IndentationError: sangría inesperada”
Es importante sangrar los bloques, pero solo los bloques que deben sangrar. Entonces, básicamente, este error dice:
– Tiene un bloque sangrado sin un “:” antes.
Ejemplo:
Aporte:
a = 3
a += 3
Producción:
File "<stdin>", line 2
a += 3
^
IndentationError: unexpected indent
La salida indica que no esperaba un bloque de sangría en la línea 2, entonces debería eliminarlo.
3. “TabError: uso inconsistente de tabulaciones y espacios en sangría” (solo python3.x)
- Puede obtener información aquí.
- Pero básicamente lo es, estás usando pestañas y espacios en tu código.
- No quieres eso.
- Quite todas las pestañas y reemplácelas por cuatro espacios.
- Y configure su editor para que lo haga automáticamente.
Finalmente, para volver sobre su problema:
Solo mire el número de línea del error y corríjalo usando la información anterior.
Tuve este mismo problema y descubrí (a través de esta respuesta a una pregunta similar) que el problema era que no sangré correctamente la cadena de documentos correctamente. Desafortunadamente, IDLE no brinda comentarios útiles aquí, pero una vez que arreglé la sangría de la cadena de documentos, el problema desapareció.
Específicamente — código incorrecto que genera errores de sangría:
def my_function(args):
"Here is my docstring"
....
Buen código que evita errores de sangría:
def my_function(args):
"Here is my docstring"
....
Nota: no estoy diciendo esto es el problema, pero que puede ser, porque en mi caso, lo fue!