На самом деле в Python есть разница:
Если переменная с именем some_var
не определена, вы не можете получить к ней доступ, чтобы узнать, что она не существует -
вы получите исключение NameError.
Это так по замыслу: неопределенные имена переменных не имеют значения "undefined" или "null", они вызывают исключение, и это одно из больших отличий от Python до большинства динамически типизированных языков.
Таким образом, Pythonic не может получить утверждение, где some_var
может быть или не быть определено. В хорошей программе это было бы определено, даже если бы оно содержало «None» или «False» -
В этом случае идиома "или" будет работать, но рекомендуемый способ ее обработки - использовать выражение if
как в:
return some_var if some_var else "some_var contains a False Value"
Если у вас есть код, в котором some_var
может не быть определен и не может для этого изменить его, вы можете проверить, существует ли строка "some_var" в качестве ключа в словаре локальных переменных, возвращаемых locals()
знать, было ли это определено или нет:
return some_var if "some_var" in locals() else "some_var was not defined"
Это тоже не самый питонический способ - иметь дело с переменной, которая не может быть определена, является исключительной в коде Python. Поэтому наилучшей практикой будет попытка использовать содержимое переменной vars внутри причины try и перехватить исключение «NameError», если var не существует:
try:
return some_var
except NameError:
return "some_var not defined"