¿Cuál es la mejor manera de salir de una función (que no tiene valor de retorno) en python antes de que finalice la función (por ejemplo, una comprobación falla)?


164

Supongamos una iteración en la que llamamos a una función sin un valor de retorno. La forma en que creo que mi programa debería comportarse se explica en este pseudocódigo:

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 implemento esto en python, me molesta que la función devuelva a None. ¿Hay una mejor manera de "salir de una función que no tiene valor de retorno, si falla una verificación en el cuerpo de la función"?


66
Python siempre devuelve None si no devuelve algo explícitamente. Pero puedes dejar el Ninguno apagado.
Keith

2
Dependiendo de lo que el cheque es, es posible también raiseuna excepción (o, muy rara vez, hacen la función de retorno Verdadero / Falso)
Rosh Oxymoron

Respuestas:


277

Simplemente podrías usar

return

que hace exactamente lo mismo que

return None

Su función también regresará Nonesi la ejecución llega al final del cuerpo de la función sin tocar una returninstrucción. No devolver nada es lo mismo que regresar Noneen Python.


returnno funciona, si configuro a = method(), dentro del método que uso return, aún sigue ejecutando código detrás de a. exit debe ser como php exit (), rompe el programa al instante.
TomSawyer

2
@ TomSawyer para detener un programa de Python antes, hazlo import sysprimero y luego sys.exit()si quieres salir pero informas de éxito o sys.exit("some error message to print to stderr").
Boris

@ Boris, esto es lo que estaba buscando y funcionó para mí.
mikey

17

Yo sugeriría:

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

13

puede usar la returninstrucción sin ningún parámetro para salir de una función

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

o plantear una excepción si desea ser informado 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...
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.