python - outer - IndentationError: unindent no coincide con ningún nivel de sangría externa
unindent does not match any outer indentation level break (20)
Cuando compilo el código de Python a continuación, obtengo
IndentationError: unindent no coincide con ningún nivel de sangría externa
import sys
def Factorial(n): # Return factorial
result = 0
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
¿Por qué?
¿Está seguro de que no está mezclando tabulaciones y espacios en su espacio en blanco de sangría? (Eso causará ese error).
Tenga en cuenta que se recomienda no usar pestañas en el código de Python. Ver la guía de estilo . Debe configurar Notepad ++ para insertar espacios para las pestañas.
Cuando me he encontrado con este error, es porque de alguna manera he mezclado las pestañas y los espacios en mi editor.
En el Atom
ir
Packages > Whitespace > Convert Spaces to Tabs
Luego revisa nuevamente tu sangría de archivo:
python -m tabnanny yourFile.py
o
>python
>>> help("yourFile.py")
En mi caso, el problema fue la configuración de pydev en Eclipse.
Esto se debe a que hay una mezcla de ambas pestañas y espacios. Puede eliminar todos los espacios y reemplazarlos con pestañas.
O, intenta escribir esto:
#!/usr/bin/python -tt
Al principio del código. Esta línea resuelve cualquier diferencia entre tabulaciones y espacios.
La línea: result = result * i
debería estar sangrada (es el cuerpo del bucle for).
O bien, tienes espacios mixtos y caracteres de tabulación
Otros carteles son probablemente correctos ... puede haber espacios mezclados con tus pestañas. Intente hacer una búsqueda y reemplazo para reemplazar todas las pestañas con algunos espacios.
Prueba esto:
import sys
def Factorial(n): # return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
print Factorial(10)
Para verificar fácilmente los problemas con las pestañas / espacios, puede hacer esto:
python -m tabnanny yourfile.py
o simplemente puede configurar su editor correctamente, por supuesto :-)
Parece ser un problema de sangría. No es necesario que coincidan los corchetes en Python, pero sí los niveles de sangría.
La mejor manera de evitar problemas de espacio / tabulación es mostrar caracteres invisibles dentro de su editor de texto. Esto le dará una manera rápida de prevenir y / o resolver errores relacionados con la sangría.
Además, inyectar código copiado y pegado es una fuente común para este tipo de problema.
Podría ser porque la función que está encima no está sangrada de la misma manera. es decir
class a:
def blah:
print("Hello world")
def blah1:
print("Hello world")
Sólo una adición. Tuve un problema similar con ambas muescas en Notepad ++.
- Sangría no aceptada
Nivel de sangrado externo
Vaya a ----> pestaña de búsqueda ----> toque sobre reemplazar ----> presione el botón de radio Extendido a continuación ---> Ahora reemplace / t con cuatro espacios
Vaya a ----> pestaña de búsqueda ----> toque sobre reemplazar ----> presione el botón de radio Extendido a continuación ---> Ahora reemplace / n con nada
Si está utilizando texto sublime para el desarrollo de Python, puede evitar el error utilizando el paquete Anaconda. Después de instalar Anaconda,
- abre tu archivo en sublime
- clic derecho sobre los espacios abiertos
- elige anaconda
- haga clic en autoformato
- HECHO o presione CTRL + ALT + R.
Si estás usando Vim, pulsa escape y luego escribe
gg = G
Este auto sangra todo y aclarará cualquier espacio que hayas lanzado.
Si usa el editor IDLE de Python, puede hacerlo como sugiere en uno de los mensajes de error similares:
1) seleccionar todo, por ejemplo, Ctrl + A
2) Ir a Formato -> Untabify Region
3) Verifique que su sangría sea correcta, guarde y vuelva a ejecutar su programa.
Estoy usando Python 2.5.4
Si usa el editor de Komodo, puede hacer lo que sugiere en uno de los mensajes de error similares:
1) seleccionar todo, por ejemplo, Ctrl + A
2) Ir al Código -> Untabify Region
3) Verifique que su sangría sea correcta, guarde y vuelva a ejecutar su programa.
Estoy usando Python 3.4.2
Si usa notepad ++, haga un "reemplazo" con el modo de búsqueda extendida para encontrar / t y reemplace con cuatro espacios.
Tuve el mismo problema ayer, fue un error de sangrado, estaba usando un editor de texto sublime. Me tomé las horas tratando de arreglarlo y al final terminé copiando el código en el editor de texto VI y funcionó bien. ps python es demasiado sensible al espacio en blanco, asegúrese de no mezclar espacio y tabulación.
incluso yo también encontré el mismo problema, luego descubrí que hay un problema de codificación. Le sugiero que también cambie su editor. Los mejores IDE o editores compatibles con Python son pycharm, sublime, vim para linux.
para usuarios de Atom, Packages ->whitspace -> remove trailing whitespaces
esto me funcionó
IMPORTANTE : Los espacios son el método preferido . ¿Ver PEP008 Indentation y pestañas o espacios? . (Gracias a @Siha por esto.)
Para usuarios de Sublime Text
:
Establezca Sublime Text
para usar las pestañas para la sangría: View
-> Indentation
-> Convert Indentation to Tabs
Desmarque la opción Indent Using Spaces
también en el mismo submenú de arriba. Esto resolverá inmediatamente este problema.