Определите, определена ли переменная в Python
Вопрос
Возможный дубликат:
Простой способ проверить, что переменная определена в Python?
Как проверить, существует ли переменная в Python?
Как узнать, установлена ли переменная в определенном месте кода во время выполнения?Это не всегда очевидно, поскольку (1) переменная может быть условно установлена и (2) переменная может быть условно удалена.Я ищу что-то вроде defined()
в Perl или isset()
на PHP или defined?
в Руби.
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
Решение
try:
thevariable
except NameError:
print("well, it WASN'T defined after all!")
else:
print("sure, it was defined.")
Другие советы
'a' in vars() or 'a' in globals()
если вы хотите быть педантичным, вы также можете проверить встроенные функции
'a' in vars(__builtins__)
Я думаю, что лучше избегать такой ситуации.Чище и понятнее написать:
a = None
if condition:
a = 42
try:
a # does a exist in the current namespace
except NameError:
a = 10 # nope
Одна из возможных ситуаций, когда это может понадобиться:
Если вы используете finally
блокировать закрытие соединений, но в try
блок, программа завершается с sys.exit()
прежде чем соединение будет определено.В этом случае finally
будет вызван блок, и оператор закрытия соединения завершится неудачей, поскольку соединение не было создано.
В данном конкретном случае лучше сделать a = None
вместо del a
.Это уменьшит счетчик ссылок на объект. a
был (если таковой имеется) назначен и не выйдет из строя, когда a
не определен.Обратите внимание, что del
Оператор не вызывает деструктор объекта напрямую, а отвязывает его от переменной.Деструктор объекта вызывается, когда счетчик ссылок становится равным нулю.