¿Qué hacer con “sangría inesperada” en python?

¿Cómo rectifico el error “sangría inesperada” en python?

Python utiliza 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:

Guión inesperado. Esta línea de código tiene más espacios al comienzo que el anterior, pero el anterior no es el inicio de un subbloque (por ejemplo, si / while / para la statement). Todas las líneas de código en un bloque deben comenzar con exactamente la misma cadena de espacio en blanco. Por ejemplo:

>>> def a(): ... print "foo" ... print "bar" IndentationError: unexpected indent 

Este es especialmente común cuando se ejecuta python de forma interactiva: asegúrate de no colocar espacios adicionales antes de tus comandos. (Muy molesto al copiar y pegar código de ejemplo)

 >>> print "hello" IndentationError: unexpected indent 

Unindent no coincide con ningún nivel de sangría exterior. Esta línea de código tiene menos espacios al comienzo que el anterior, pero tampoco coincide con ningún otro bloque del que pueda formar parte. Python no puede decidir a dónde va. Por ejemplo, a continuación, ¿se supone que la impresión final es parte de la cláusula if, o no?

 >>> if user == "Joey": ... print "Super secret powers enabled!" ... print "Revealing super secrets" IndendationError: unindent does not match any outer indentation level 

Espera un bloque sangrado. Esta línea de código tiene el mismo número de espacios al comienzo que el anterior, pero se esperaba que la última línea comenzara un bloque (por ejemplo, si / while / para la statement, definición de la función).

 >>> def foo(): ... print "Bar" IndentationError: expected an indented block 

Si desea una función que no hace nada, use el pase de comando “no-op”:

 >>> def foo(): ... pass 

La mezcla de tabulaciones y espacios está permitida (al menos en mi versión de Python), pero Python asume que las tabs tienen 8 caracteres, que pueden no coincidir con su editor. Solo di “no” a las tabs. La mayoría de los editores permiten que sean reemplazados automáticamente por espacios.

La mejor manera de evitar estos problemas es usar siempre un número constante de espacios cuando se sangra 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.

En Python, el espaciado es muy importante, esto da la estructura de los bloques de código. Este error ocurre cuando arruinas la estructura de tu código, por ejemplo, como este:

 def test_function() : if 5 > 3 : print "hello" 

También puede tener una mezcla de tabs y espacios en su archivo.

Le sugiero que use un editor que tenga en cuenta la syntax de Python como PyScripter o Netbeans

Ejecute su código con la opción -tt para averiguar si está usando tabulaciones y espacios de manera inconsistente

Active los espacios en blanco visibles en cualquier editor que esté utilizando y active las tabs de reemplazo con espacios.

Si bien puede usar las tabs con las tabs de mezcla de Python, el espacio generalmente conduce al error que está experimentando. Reemplazar las tabs con 4 espacios es el método recomendado para escribir código Python.

Mediante el uso de la sangría correcta. Python es consciente del espacio en blanco, por lo que debe seguir sus líneas de guía de sangría para los bloques o obtendrá errores de sangría.

Si estás escribiendo Python usando Sublime y obteniendo errores de sangría,

ver -> sangría -> convertir sangría a espacios

El problema que estoy describiendo es causado por el editor de texto Sublime. El mismo problema podría ser causado por otros editores también. Esencialmente, el problema tiene que ver con Python que quiere tratar las sangrías en términos de espacios frente a varios editores que codifican las sangrías en términos de tabs.

Asegúrate de usar la opción “insertar espacios en lugar de tabs” en tu editor. Luego, puede elegir un ancho de pestaña de, por ejemplo, 4. Puede encontrar esas opciones en gedit en editar -> preferencias -> editor.

Resultado final: UTILIZAR ESPACIOS, no tabs

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

 def my_function(): x = 3 y = 7 

el intérprete interpretará la línea vacía antes de y = 7 como el final de la expresión, es decir, que ya no está definiendo su función, y la siguiente línea – y = 7 tendrá una sangría incorrecta porque es una expresión nueva.

Hay un truco que siempre me ha funcionado:

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 está sangrada.

Me sucedió cuando usé vim, gedit o editores así.

Intenta usar solo 1 editor para tu código.

Simplemente copie su script y ponga “” “su código completo” “” …

especifique esta línea en una variable .. como,

 a = """ your python script """ print a.replace('here please press tab button it will insert some space"," here simply press space bar four times") # here we replacing tab space by four char space as per pep 8 style guide.. 

ahora ejecute este código, en Sublime Editor usando ctrl + b, ahora imprimirá el código sangrado en la consola. Eso es

Si la sangría se ve bien, entonces 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 tabs.

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.

Un problema que no parece haberse 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 script:

 def add_one(x): try: return x + 1 add_one(5) 

Esto devuelve un IndentationError: unexpected unindent cuando el problema es, por supuesto, una except: statement.

Mi punto: ¡revise el código de arriba donde se reporta la sangría (un) inesperada!

Todo lo que debe hacer es eliminar espacios o tabulaciones desde el inicio de los siguientes códigos

 from django.contrib import admin # Register your models here. from .models import Myapp admin.site.register(Myapp) 

La sangría en Python es importante y esto no es para la legibilidad del código, a diferencia de muchos otros lenguajes de progtwigción. Si hay algún espacio en blanco o pestaña 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 pegemos el código en cualquier Python. Asegúrese de identificar y eliminar estos espacios utilizando un editor de texto como Notepad ++ o elimine manualmente los espacios en blanco de la línea de código en la que está recibiendo un error.

 Step1 :Gives error L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]] print(L[2: ]) Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ]) Step3: No error after space was removed L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]] print(L[2: ]) OUTPUT: [[7, 8, 9, 10]] 

¡Gracias!