2011-10-20 27 views
21

Quando si esegue il seguente codice (in Python 2.7.1 su un Mac con Mac OS X 10,7)Python errore istruzione return " 'ritorno' la funzione di fuori"

while True: 
    return False 

ottengo il seguente errore

SyntaxError: 'return' outside function 

Ho controllato attentamente le schede erranti e/o gli spazi. Posso confermare che il codice non riesce con l'errore sopra riportato quando utilizzo i 4 spazi di indentazione consigliati. Questo comportamento si verifica anche quando il ritorno viene inserito all'interno di altre istruzioni di controllo (ad es. If, for, ecc.).

Qualsiasi aiuto sarebbe apprezzato. Grazie!

+14

Ciò che l'interprete dice, non sei all'interno di una funzione. Le istruzioni di controllo non sono funzioni, si definisce una funzione con 'def'. –

+2

Probabilmente stai cercando 'break'. –

+0

Io uso 'yield' che mi dà lo stesso errore, la ragione è la stessa, deve essere in una funzione .. – 8090PZ

risposta

40

Il ritorno dichiarazione senso solo all'interno delle funzioni:

def foo(): 
    while True: 
     return False 
+1

Raymond, hai ricevuto così tanti punti rep che il tuo contatore è tornato indietro a 0? – PaulMcG

+0

@PaulMcGuire: il tuo commento mi confonde. –

+0

@PaulMcGuire Il suo account è esistito solo per tre giorni. – agf

11

Per rompere un ciclo, utilizzare break invece di return.

Oppure inserire il ciclo o il costrutto di controllo in una funzione, solo le funzioni possono restituire valori.

+0

Giusto, grazie mille @Jurgen – Jeff

12

Utilizzare quit() in questo contesto. break si aspetta di essere all'interno di un ciclo e return si aspetta di essere all'interno di una funzione.

+0

Questo funziona nel caso in cui si desideri interrompere lo script, come si farebbe con un annullamento del reso. Preferirei usare sys.exit(), perché, quindi, è possibile specificare uno stato di uscita. Controlla questa domanda: http://stackoverflow.com/questions/543309/programatically-stop-execution-of-python-script – gcucurull

1

Come da documentazione sull'istruzione return, return può essere annidato sintatticamente solo in una definizione di funzione. Lo stesso vale per yield.

Problemi correlati