2012-04-20 10 views
11

Ecco il codice .:IndentationError previsto un blocco indentato

def myfirst_yoursecond(p,q): 

a = p.find(" ") 
b = q.find(" ") 
str_p = p[0:a] 
str_q = p[b+1:] 

if str_p == str_q: 
    result = True 
else: 
    result = False 
return result 

Ecco l'errore:

Traceback (most recent call last): 
File "vm_main.py", line 26, in <module> 
import main 
File "/tmp/vmuser_ssgopfskde/main.py", line 22 
result = False 
^ 
IndentationError: expected an indented block 

Cosa c'è di sbagliato con il mio codice?

risposta

28

Hai schede e spazi misti. Questo può portare ad errori confusi.

Io suggerirei usando solo schede o solo spazi per l'indentazione.

L'utilizzo di soli spazi è generalmente la scelta più semplice. La maggior parte degli editor ha un'opzione per convertire automaticamente le schede in spazi. Se il tuo editor ha questa opzione, accendila.


Per inciso, il codice è più dettagliato di quanto non debba essere. Invece di questo:

if str_p == str_q: 
    result = True 
else: 
    result = False 
return result 

solo fare questo:

return str_p == str_q 

È inoltre sembrano avere un bug su questa linea:

str_q = p[b+1:] 

lascio a voi di capire che cosa il l'errore è

+0

Grazie !! Funziona! Python non supporta entrambe le indentazioni. Sembra strano. – Sam

+0

In realtà supporta le schede a 8 spazi, ma è molto meglio attenersi solo agli spazi, in particolare se il codice si sposta tra editor e sistemi (cosa che dovrebbe aspettarsi.) – zigg

+0

Mi dispiace. L'ho cambiato in q [b + 1:]. È davvero gentile da parte tua aiutarmi molto. – Sam

0

È necessario installare un editor (o IDE) che supporta la sintassi di Python. Può evidenziare il codice sorgente e effettuare il controllo del formato di base. Ad esempio: Eric4, Spyder, Ninjia o Emacs, Vi.

+0

I Pyscripter utente in Windows. Perché devo fare altri lavori in Windows anche se mi piace molto usare linux. – Sam

1

Se si utilizza un testo mac e sublime 3, questo è ciò che si fa.

Vai al tuo /Packages/User/ e crea un file chiamato Python.sublime-settings.

In genere /Packages/User si trova all'interno di ~/Library/Application Support/Sublime Text 3/Packages/User/Python.sublime-settings se si utilizza mac os x.

Quindi lo metti nello Python.sublime-settings.

{ 
    "tab_size": 4, 
    "translate_tabs_to_spaces": false 
} 

merito va a Marco Byer answer, sublime text 3 docs e python style guide.

Questa risposta è per lo più per i lettori che hanno avuto lo stesso problema e imbattervi in ​​questo e stanno usando il testo sublime 3 su Mac OS X.

6

Questo errore si verifica anche se si dispone di un blocco senza dichiarazioni in esso

Ad esempio:

def my_function(): 
    for i in range(1,10): 


def say_hello(): 
    return "hello" 

noti che il blocco for è vuoto. È possibile utilizzare l'istruzione pass se si desidera testare il codice rimanente nel modulo.

+1

Stavo cercando una dichiarazione simile all'istruzione ':' di bash, non è facile formulare un termine di ricerca per quello; è arrivato qui immediatamente, e la tua risposta si distingue per aver menzionato uno stallo di passaggio che non conoscevo. Quindi uno. Grazie. – Roadowl

0

Ho ricevuto lo stesso errore, questo è quello che ho fatto per risolvere il problema.

Prima Rientro:

enter image description here

Rientro Errore: atteso un blocco indentato.

Dopo Rientro:

enter image description here

funzionare bene. Dopo lo spazio del TAB.

Problemi correlati