Определите, определена ли переменная в Python [duplicate]
Возможные Дубликаты:
простой способ проверить, что переменная определена в 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?
7 ответов
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__)
одна возможная ситуация, когда это может потребоваться:
если вы используете finally блок для закрытия соединений, но в try блок, программа выходит с sys.exit() перед определением соединения. В этом случае finally блок будет вызван, и оператор закрытия соединения завершится ошибкой, так как соединение не было создано.
для этого конкретного случая лучше сделать a = None вместо del a. Это уменьшит количество ссылок на object a был (если есть) назначен и не потерпит неудачу, когда a не определен. Заметьте, что del оператор не вызывает деструктор объекта напрямую,но развязывает его от переменной. Деструктор объекта вызывается, когда счетчик ссылок стал равен нулю.
если кто-то хочет поймать пытается получить доступ к не-определенной переменной внутри объекта, есть очень простой способ сделать это:
class Whatever(object):
def __getattr__(self, key):
return None
здесь python сначала пытается найти атрибут внутри объекта или дерева объектов, и только если это не удается __getattr__(self, key) вызывается функция.
Это значит, если __getattr__ называется, мы можем просто вернуть None.