¿Cómo rectifico el error "sangría inesperada" en Python?
python
syntax-error
Ventilador de Macintosh
fuente
fuente
Respuestas:
Python usa el espaciado al comienzo de la línea para determinar cuándo comienzan y terminan los bloques de código. Los errores que puede obtener son:
Sangría inesperada. Esta línea de código tiene más espacios al comienzo que la anterior, pero la anterior no es el comienzo de un subbloque (por ejemplo, instrucción if / while / for). Todas las líneas de código de un bloque deben comenzar exactamente con la misma cadena de espacios en blanco. Por ejemplo:
Este es especialmente común cuando se ejecuta Python de forma interactiva: asegúrese de no poner espacios adicionales antes de sus comandos. (¡Muy molesto al copiar y pegar código de ejemplo!)
Unindent no coincide con ningún nivel de sangría exterior. Esta línea de código tiene menos espacios al principio que la anterior, pero igualmente no coincide con ningún otro bloque del que pueda formar parte. Python no puede decidir adónde va. Por ejemplo, en lo siguiente, ¿se supone que la impresión final es parte de la cláusula if o no?
Espera un bloque sangrado. Esta línea de código tiene el mismo número de espacios al comienzo que la anterior, pero se esperaba que la última línea comenzara un bloque (por ejemplo, declaración if / while / for, definición de función).
Si desea una función que no haga nada, use el pase de comando "no-op" :
Se permite mezclar pestañas y espacios (al menos en mi versión de Python), pero Python asume que las pestañas tienen 8 caracteres, lo que puede no coincidir con su editor. Solo di "no" a las pestañas. La mayoría de los editores permiten que se sustituyan automáticamente por espacios.
La mejor manera de evitar estos problemas es usar siempre una cantidad constante de espacios cuando aplica sangría a un subbloque, y lo ideal es usar un buen IDE que resuelva el problema por usted. Esto también hará que su código sea más legible.
fuente
except
parte de unatry
cláusula. El código parece correcto (en el sentido de que la línea sin sangría está destinada a estar fuera deltry
bloque) pero Python informa esto como un error de "sangría inesperada". Esto se soluciona agregando elexcept
, quizás usandopass
(como aquí )En Python, el espaciado es muy importante, esto le da la estructura de sus bloques de código. Este error ocurre cuando arruinas la estructura de tu código, por ejemplo, de esta manera:
También puede tener una combinación de pestañas y espacios en su archivo.
Le sugiero que utilice un editor de sintaxis de Python como PyScripter o Netbeans
fuente
Ejecute su código con la opción -tt para averiguar si está usando tabulaciones y espacios de manera inconsistente
fuente
Active los espacios en blanco visibles en cualquier editor que esté usando y active reemplazar las pestañas con espacios.
Si bien puede usar pestañas con Python mezclando pestañas y el espacio generalmente conduce al error que está experimentando. Reemplazar pestañas con 4 espacios es el enfoque recomendado para escribir código Python.
fuente
Utilizando la sangría correcta. Python es consciente de los espacios en blanco, por lo que debe seguir sus pautas de sangría para los bloques o obtendrá errores de sangría.
fuente
Si está escribiendo Python con Sublime y obtiene errores de sangría,
ver -> sangría -> convertir sangría en espacios
El problema que estoy describiendo es causado por el editor de texto Sublime. El mismo problema también podría ser causado por otros editores. Esencialmente, el problema tiene que ver con Python que quiere tratar las sangrías en términos de espacios versus varios editores que codifican las sangrías en términos de pestañas.
fuente
Asegúrese de utilizar la opción "insertar espacios en lugar de pestañas" en su editor. Luego puede elegir si desea un ancho de pestaña de, por ejemplo, 4. Puede encontrar esas opciones en gedit en editar -> preferencias -> editor.
Conclusión: USE ESPACIOS, no pestañas
fuente
Este error también puede ocurrir al pegar algo en el intérprete de Python (terminal / consola).
Tenga en cuenta que el intérprete interpreta una línea vacía como el final de una expresión, por lo que si pega algo como
el intérprete interpretará la línea vacía anterior
y = 7
como el final de la expresión, es decir, que ha terminado de definir su función, y la siguiente líneay = 7
tendrá una sangría incorrecta porque es una nueva expresión.fuente
Un problema que no parece haber sido mencionado es que este error puede surgir debido a un problema con el código que no tiene nada que ver con la sangría.
Por ejemplo, tome el siguiente guión:
Esto devuelve un
IndentationError: unexpected unindent
cuando el problema es, por supuesto, unaexcept:
declaración que falta .Mi punto: verifique el código de arriba donde se informa la sangría inesperada (des)
fuente
Si la sangría se ve bien, eche un vistazo para ver si su editor tiene la opción "Ver espacios en blanco". Habilitar esto debería permitir encontrar dónde se mezclan los espacios y las pestañas.
fuente
Hay un truco que siempre me funcionó:
Si tiene una sangría inesperada y ve que todo el código está perfectamente sangrado, intente abrirlo con otro editor y verá qué línea de código no tiene sangría.
Me pasó cuando usé vim, gedit o editores como ese.
Intente usar solo 1 editor para su código.
fuente
Simplemente copie su script y coloque bajo "" "su código completo" "" ...
especificar esta línea en una variable .. como,
ahora ejecute este código, en Sublime Editor usando ctrl + b, ahora imprimirá el código sangrado en la consola. Eso es
fuente
Todo lo que necesita hacer es eliminar espacios o espacios de tabulación del inicio de los siguientes códigos
fuente
Ejecute el siguiente comando para resolverlo:
Esto actualizará su código y resolverá todos los errores de sangría :)
Espero que esto se resuelva
fuente
Notepad ++ estaba dando el espacio de tabulación correcto, pero el problema de sangría finalmente se encontró en el editor de texto Sublime.
Usa el editor de texto Sublime y ve línea por línea
fuente
La sangría en Python es importante y esto simplemente no es para la legibilidad del código, a diferencia de muchos otros lenguajes de programación. Si hay algún espacio en blanco o tabulación en su código entre comandos consecutivos, Python dará este error ya que Python es sensible a esto. Es probable que obtengamos este error cuando copiemos y peguemos el código en cualquier Python. Asegúrese de identificar y eliminar estos espacios con un editor de texto como Notepad ++ o elimine manualmente el espacio en blanco de la línea de código donde está obteniendo un error.
¡Gracias!
fuente