Qual é a melhor maneira de sair de uma função (que não tem valor de retorno) em python antes que a função termine (por exemplo, uma verificação falha)?

164

Vamos assumir uma iteração na qual chamamos uma função sem um valor de retorno. A maneira como acho que meu programa deve se comportar é explicada neste 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...

Se eu implementar isso em python, me incomoda que a função retorne a None. Existe uma maneira melhor de "sair de uma função, que não tem valor de retorno, se uma verificação falhar no corpo da função"?

Aufwind
fonte
6
O Python sempre retorna None se você não devolver algo explicitamente. Mas você pode deixar o Nenhum desativado.
Keith
2
Dependendo do que o cheque é, você pode também raiseuma exceção (ou, muito raramente, fazer a função de retorno Verdadeiro / Falso)
Rosh oxímoro

Respostas:

277

Você poderia simplesmente usar

return

que faz exatamente o mesmo que

return None

Sua função também retornará Nonese a execução atingir o final do corpo da função sem pressionar uma returninstrução. Retornar nada é o mesmo que retornar Noneem Python.

Sven Marnach
fonte
returnnão funciona, se eu definir a = method(), dentro do método que eu uso return, ele ainda continua executando o código atrás de. exit deve ser como php exit (), que interrompe o programa instantaneamente.
TomSawyer
2
@TomSawyer para interromper um programa Python mais cedo, faça import sysprimeiro e depois sys.exit()se quiser sair, mas relate sucesso ou sys.exit("some error message to print to stderr").
Boris
@ Boris, é isso que eu estava procurando e funcionou para mim.
mikey
17

Eu sugeriria:

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

você pode usar a returninstrução sem nenhum parâmetro para sair de uma função

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

ou crie uma exceção se você quiser ser informado sobre o 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...
Cédric Julien
fonte