Quelle est la meilleure façon de quitter une fonction (qui n'a pas de valeur de retour) en python avant la fin de la fonction (par exemple, une vérification échoue)?

165

Supposons une itération dans laquelle nous appelons une fonction sans valeur de retour. La façon dont je pense que mon programme devrait se comporter est expliquée dans ce pseudocode:

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

Si j'implémente cela en python, cela me dérange, que la fonction renvoie un None. Existe-t-il une meilleure façon de "quitter une fonction, qui n'a pas de valeur de retour, si une vérification échoue dans le corps de la fonction"?

Aufwind
la source
6
Python renvoie toujours None si vous ne retournez pas explicitement quelque chose. Mais vous pouvez laisser None off.
Keith
2
En fonction de la vérification, vous pouvez également faire raiseune exception (ou, très rarement, rendre la fonction Vrai / Faux)
Rosh Oxymoron

Réponses:

280

Vous pouvez simplement utiliser

return

qui fait exactement la même chose que

return None

Votre fonction retournera également Nonesi l'exécution atteint la fin du corps de la fonction sans toucher une returninstruction. Ne rien renvoyer Noneéquivaut à retourner en Python.

Sven Marnach
la source
returnne fonctionne pas, si je définis a = method(), à l'intérieur de la méthode que j'utilise return, il continue à exécuter du code derrière un. exit devrait être comme php exit (), il casse le programme instantanément.
TomSawyer
2
@TomSawyer pour arrêter un programme Python prématurément, faites d' import sysabord et ensuite sys.exit()si vous voulez quitter mais signaler un succès ou sys.exit("some error message to print to stderr").
Boris
@Boris, c'est ce que je cherchais et cela a fonctionné pour moi.
mikey
17

Je voudrais suggerer:

def foo(element):
    do something
    if not check: return
    do more (because check was succesful)
    do much much more...
Hyperborée
la source
13

vous pouvez utiliser l' returninstruction sans aucun paramètre pour quitter une fonction

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

ou soulevez une exception si vous souhaitez être informé du problème

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
la source