Qual è il modo migliore per uscire da una funzione (che non ha valore di ritorno) in Python prima che la funzione termini (es. Un controllo fallisce)?


165

Supponiamo un'iterazione in cui chiamiamo una funzione senza un valore di ritorno. Il modo in cui penso che il mio programma dovrebbe comportarsi è spiegato in questo pseudocodice:

for element in some_list:
    foo(element)

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return None
    do much much more...

Se lo implemento in Python, mi dà fastidio che la funzione restituisca a None. Esiste un modo migliore per "uscire da una funzione, che non ha valore di ritorno, se un controllo fallisce nel corpo della funzione"?


6
Python restituisce sempre None se non restituisci esplicitamente qualcosa. Ma puoi lasciare spento il Nessuno.
Keith,

2
A seconda di quale sia il controllo, potresti anche fare raiseun'eccezione (o, molto raramente, fare in modo che la funzione ritorni Vero / Falso)
Rosh Oxymoron

Risposte:


280

Potresti semplicemente usare

return

che fa esattamente lo stesso di

return None

La tua funzione tornerà anche Nonese l'esecuzione raggiunge la fine del corpo della funzione senza colpire returnun'istruzione. Restituire nulla è lo stesso che tornare Nonein Python.


returnnon funziona, se imposto a = method(), all'interno del metodo che utilizzo return, continua a eseguire il codice dietro a. exit dovrebbe essere come php exit (), interrompe immediatamente il programma.
TomSawyer,

2
@TomSawyer per interrompere anticipatamente un programma Python, esegui import sysprima e poi sys.exit()se vuoi uscire ma segnalare il successo o sys.exit("some error message to print to stderr").
Boris

@Boris, questo è quello che stavo cercando e questo ha funzionato per me.
Mike

17

Io suggerirei:

def foo(element):
    do something
    if not check: return
    do more (because check was succesful)
    do much much more...

13

è possibile utilizzare l' returnistruzione senza alcun parametro per uscire da una funzione

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return
    do much much more...

o sollevare un'eccezione se si desidera essere informati del problema

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        raise Exception("cause of the problem")
    do much much more...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.