2011-12-26 21 views
26

Aquí está mi código ... Recibo un error de sangría pero no sé por qué ocurre.Malta de Python Error: sangría inesperada

->

# loop 
while d <= end_date: 
    # print d.strftime("%Y%m%d") 
    fecha = d.strftime("%Y%m%d") 
    # set url 
    url = 'http://www.wpemergencia.omie.es//datosPub/marginalpdbc/marginalpdbc_' + fecha + '.1' 
    # Descargamos fichero 
    response = urllib2.urlopen(url) 
    # Abrimos fichero 
    output = open(fname,'wb') 
    # Escribimos fichero 
    output.write(response.read()) 
    # Cerramos y guardamos fichero 
    output.close() 
    # fecha++ 
    d += delta 
+5

¿Mezcla de tabuladores y espacios? – taskinoor

+0

No hay 'IndentationError aquí'. Debe estar en otro lugar en su código, junto con las definiciones de 'd' y' end_date'. Proporcione un [SSCCE] (http://sscce.org/). – Johnsyweb

+2

Cualquier editor medio decente tiene la opción de mostrar visualmente espacios y pestañas. Usa eso. – sbk

Respuesta

43

ejecutar su programa con

python -t script.py 

Esto le avisará si tiene pestañas y espacios mezclados.

En los sistemas * nix, se puede ver en las pestañas están ejecutando

cat -A script.py 

y se puede convertir automáticamente las pestañas a 4 espacios con el comando

expand -t 4 script.py > fixed_script.py 

PS. Asegúrese de utilizar un editor de programación (por ejemplo, emacs, vim), no un procesador de texto, cuando programe. No obtendrá este problema con un editor de programación.

PPS. Para usuarios de emacs, M-xwhitespace-mode mostrará la misma información que cat -A desde un búfer de emacs.

+0

No es que unutbu no esté completo en su respuesta, tuve el mismo problema y al usar cat -A script.py puede ver inmediatamente las sangres que faltan. Incluso si copia y pega y puede parecer una sangría en su editor. De hecho, no lo es, así que ten cuidado. –

7

verificación si tabulaciones y espacios mixtos, que es una fuente frecuente de errores de identación.

3

No se pueden mezclar tabulaciones y espacios para identación. La mejor práctica es convertir todas las pestañas en espacios.

¿Cómo solucionar esto? Bueno, simplemente elimine todos los espacios/pestañas antes de cada línea y conviértalos uniformemente en pestañas O espacios, pero no los mezcle. La mejor solución: habilite en su Editor la opción de convertir automágicamente cualquier pestaña en espacios.

También tenga en cuenta que su problema real puede estar en las líneas antes de este bloque, y Python arroja el error aquí, debido a una indentación principal no válida que no coincide con las siguientes identaciones.

7

encuentra todas las pestañas y las reemplazas por 4 espacios en el bloc de notas ++. Funcionó.

+0

Después de año y medio desde que se publicó la pregunta original, en realidad no pudo encontrar nada nuevo para sugerir. Bienvenido al SO y, por favor, lea las respuestas anteriores antes de publicar el suyo. No repita las respuestas que ya existen. – Wh1T3h4Ck5

0

simplemente copiar la secuencia de comandos y puestos bajo "" "todo el código ''" ...

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

a = """ your entire code """ 
print a.replace(' ',' ') # first 4 spaces tab second four space from space bar 

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 ejecutar este código, en sublime usando ctrl + b, ahora imprimirá el código sangrado en la consola. eso es todo

Cuestiones relacionadas