¿Cómo rectifico el error "sangría inesperada" en Python?
¿Cómo rectifico el error "sangría inesperada" en Python?
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:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
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!)
>>> 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 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?
>>> 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 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).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Si desea una función que no haga nada, use el pase de comando "no-op" :
>>> def foo():
... pass
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.
except
parte de una try
cláusula. El código parece correcto (en el sentido de que la línea sin sangría está destinada a estar fuera del try
bloque) pero Python informa esto como un error de "sangría inesperada". Esto se soluciona agregando el except
, quizás usando pass
(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:
def test_function() :
if 5 > 3 :
print "hello"
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
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.
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.
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
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 anterior y = 7
como el final de la expresión, es decir, que ha terminado de definir su función, y la siguiente línea y = 7
tendrá una sangría incorrecta porque es una nueva expresión.
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:
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:
declaración que falta .
Mi punto: verifique el código de arriba donde se informa la sangría inesperada (des)
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.
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.
Simplemente copie su script y coloque bajo "" "su código completo" "" ...
especificar 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
Todo lo que necesita hacer es eliminar espacios o espacios de tabulación del inicio de los siguientes códigos
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Ejecute el siguiente comando para resolverlo:
autopep8 -i <filename>.py
Esto actualizará su código y resolverá todos los errores de sangría :)
Espero que esto se resuelva
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
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.
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!