`return None` в python не рекомендуется. Как обойти?
У меня есть функция, которая соединяется с url с помощью httplib
с помощью lxml
. Он проверяет на xpath
для определенного шаблона, и если проверка положительная, она возвращает строку. Но если проверка была отрицательной, она ничего не возвращает.
Теперь ситуация в том, что моя функция возвращает None
. Я вызываю функцию, проверяю, имеет ли ее возвращаемое значение not None
и продолжит в коде.
Пример:
def foobar(arg):
# connect to page by httplib
# check for arg in a certain pattern by lxml
if check:
return result
else:
return None
result = foobar(arg)
if result:
# do stuff
else:
# do other stuff
Недавно я прочитал, что это не выход. Как избежать таких ситуаций?
Ответы
Ответ 1
Нет ничего плохого в возвращении None
.
В большинстве случаев вам не нужно явно возвращать None
. Python сделает это за вас. Это измененная версия вашего foobar
, которая ведет себя одинаково, без явного возврата None
:
def foobar(arg):
if check:
return result
# If not check, then None will be returned
Тем не менее, даже если Python неявно возвращает None
, в явном виде есть значение; Ваш код становится легче читать и понимать. Это постоянный компромисс, для которого нет общего ответа.
Ответ 2
Это зависит от того, почему это "нет"; Я этого не слышал. Если это просто плохая форма, опустите "return None" (оператор else) вообще, и по умолчанию он будет возвращать None. Если он считал, что неправильно возвращать None, верните 0 или '' (пустую строку) или False вместо этого, в зависимости от типа, ожидаемого вызывающим.
Ответ 3
Существует много стилей, связанных с этим, включая использование исключений или просто возвращающее все, что вы получаете, включая пустую строку. Это тоже хорошо:
def foobar(arg):
...
if check:
return result
result = foobar(arg)
if result is not None:
# do stuff
else:
# do other stuff