Який найкращий спосіб вийти з функції (яка не має значення повернення) в python до того, як функція закінчиться (наприклад, перевірка не вдалася)?


164

Припустимо ітерацію, в якій ми викликаємо функцію без зворотного значення. Те, як я думаю, що моя програма повинна вести себе, пояснюється в цьому псевдокоді:

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, якщо ви явно щось не повертаєте. Але ви можете залишити «Ніхто» у відключенні.
Кіт

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

Відповіді:


278

Ви можете просто використовувати

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").
Борис

@Boris, це те, що я шукав, і це працювало на мене.
mikey

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.