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