Каков наилучший способ выхода из функции (которая не имеет возвращаемого значения) в python до ее завершения (например, проверка не пройдена)?


165

Давайте предположим итерацию, в которой мы вызываем функцию без возвращаемого значения. То, как должна вести себя моя программа, объясняется в этом псевдокоде:

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

Если я реализую это в python, меня беспокоит, что функция возвращает a None. Есть ли лучший способ для «выхода из функции, которая не имеет возвращаемого значения, если проверка не проходит в теле функции»?


6
Python всегда возвращает None, если вы не возвращаете что-либо явно. Но вы можете оставить None выключенным.
Кит

2
В зависимости от того, что это за проверка, вы можете также raiseсделать исключение (или, очень редко, заставить функцию возвращать True / False)
Rosh Oxymoron

Ответы:


281

Вы могли бы просто использовать

return

который делает точно так же, как

return None

Ваша функция также вернется, Noneесли выполнение достигнет конца тела функции без нажатия на returnоператор. Возврат ничего не означает возвращение Noneв Python.


returnне работает, если я установил a = method(), внутри метода, который я использую return, он все еще продолжает выполнять код за. Выход должен быть похож на php exit (), он мгновенно ломает программу.
TomSawyer

2
@ TomSawyer, чтобы остановить программу на Python раньше, import sysсначала, а затем, sys.exit()если вы хотите выйти, но сообщить об успехе или sys.exit("some error message to print to stderr").
Борис

@ Борис, это то, что я искал, и это сработало для меня.
Майки

17

Я бы предложил:

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

13

Вы можете использовать returnоператор без каких-либо параметров для выхода из функции

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

или поднять исключение, если вы хотите получить информацию о проблеме

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...
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.