Определите, определена ли переменная в 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
.