Was ist der beste Weg, um eine Funktion (die keinen Rückgabewert hat) in Python zu beenden, bevor die Funktion endet (z. B. wenn eine Prüfung fehlschlägt)?

163

Nehmen wir eine Iteration an, in der wir eine Funktion ohne Rückgabewert aufrufen. Die Art und Weise, wie sich mein Programm verhalten sollte, wird in diesem Pseudocode erklärt:

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

Wenn ich dies in Python implementiere, stört es mich, dass die Funktion a zurückgibt None. Gibt es eine bessere Möglichkeit, "eine Funktion zu verlassen, die keinen Rückgabewert hat, wenn eine Prüfung im Hauptteil der Funktion fehlschlägt"?

Aufwind
quelle
6
Python gibt immer None zurück, wenn Sie etwas nicht explizit zurückgeben. Aber Sie können das Keine auslassen.
Keith
2
Abhängig davon, was die Prüfung ist, können Sie auch raiseeine Ausnahme (oder sehr selten die Funktion True / False zurückgeben)
Rosh Oxymoron

Antworten:

276

Sie könnten einfach verwenden

return

das macht genau das gleiche wie

return None

Ihre Funktion wird auch zurückgegeben, Nonewenn die Ausführung das Ende des Funktionskörpers erreicht, ohne eine returnAnweisung zu treffen . Nichts zurückzugeben ist dasselbe wie Nonein Python zurückzukehren.

Sven Marnach
quelle
returnfunktioniert nicht, wenn ich die von a = method()mir verwendete Methode einstelle , returnläuft der Code immer noch hinter a. exit sollte wie php exit () sein, es bricht das Programm sofort.
TomSawyer
2
@ TomSawyer Um ein Python-Programm vorzeitig zu stoppen, tun Sie dies import syszuerst und dann, sys.exit()wenn Sie das Programm beenden möchten, aber Erfolg melden möchten oder sys.exit("some error message to print to stderr").
Boris
@ Boris, das habe ich gesucht und das hat bei mir funktioniert.
Mikey
17

Ich würde vorschlagen:

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

Sie können die returnAnweisung ohne Parameter verwenden, um eine Funktion zu beenden

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

oder eine Ausnahme auslösen, wenn Sie über das Problem informiert werden möchten

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...
Cédric Julien
quelle