2011-12-26 14 views
26

Ecco il mio codice ... Sto ottenendo un errore di indentazione ma non so perché si verifica.Python IndentationError: indent inaspettato

->

# 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

Mix di scheda e spazi? – taskinoor

+0

Non c'è "IndentationError qui". Deve essere altrove nel codice, insieme alle definizioni di 'd' e' end_date'. Si prega di fornire un [SSCCE] (http://sscce.org/). – Johnsyweb

+2

Qualsiasi editor half-decent ha un'opzione per mostrare in qualche modo gli spazi e le schede visivamente. Usalo. – sbk

risposta

43

eseguire il programma con

python -t script.py 

Questo vi avviserà se si dispone di schede e gli spazi misti.

Su sistemi * nix, è possibile vedere dove le schede sono eseguendo

cat -A script.py 

e si può convertire automaticamente schede per 4 spazi con il comando

expand -t 4 script.py > fixed_script.py 

PS. Assicurati di utilizzare un editor di programmazione (ad es. Emacs, vim), non un word processor, durante la programmazione. Non avrai questo problema con un editor di programmazione.

PPS. Per gli utenti di emacs, M-xwhitespace-mode mostrerà le stesse informazioni di cat -A all'interno di un buffer emacs!

+0

Non che unutbu non sia completo nella sua risposta, ho avuto lo stesso problema e usando cat -A script.py puoi vedere immediatamente i rientri mancanti. Anche se copi e incolli, potrebbe sembrare un rientro nel tuo editor. In effetti non lo è, quindi stai attento. –

7

di controllo se si mescolanza di tabulazioni e spazi, che è una frequente fonte di errori di indentazione.

3

Non è possibile combinare scheda e spazi per l'identificazione. La migliore pratica è quella di convertire tutte le schede in spazi.

Come risolvere il problema? Bene, basta eliminare tutti gli spazi/tabulazioni prima di ogni riga e convertirli uniformemente in schede o spazi, ma non mescolare. La soluzione migliore: abilita nell'Editor l'opzione per convertire automaticamente tutte le schede in spazi.

Inoltre, si tenga presente che il proprio problema potrebbe trovarsi nelle righe precedenti a questo blocco e Python genera l'errore qui, a causa di un indentazione principale non valido che non corrisponde alle seguenti identificazioni!

7

trova tutte le schede e sostituito da 4 spazi in Blocco note ++. Ha funzionato.

+0

Dopo un anno e mezzo dall'invio della domanda originale, non è stato possibile trovare nulla di nuovo da suggerire. Benvenuto in SO e, per favore, leggi le risposte precedenti prima di pubblicare le tue. Non ripetere le risposte che esistono già. – Wh1T3h4Ck5

0

semplicemente copiare lo script e messi sotto "" "il vostro intero codice """ ...

specificare questa linea in una variabile .. come,

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.. 

ora eseguire questo codice, in sublime usando ctrl + b, ora stamperà il codice rientrato nella console. questo è il