Determine se a variável é definida no Python [duplicado
Pergunta
Possível duplicata:
Maneira fácil de verificar se a variável é definida no Python?
Como verifico se existe uma variável no Python?
Como você sabe se uma variável foi definida em um local específico no código em tempo de execução? Isso nem sempre é óbvio porque (1) a variável pode ser configurada condicionalmente e (2) a variável pode ser excluída condicionalmente. Estou procurando algo como defined()
em perl ou isset()
em php ou defined?
em Ruby.
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
Solução
try:
thevariable
except NameError:
print("well, it WASN'T defined after all!")
else:
print("sure, it was defined.")
Outras dicas
'a' in vars() or 'a' in globals()
Se você quer ser pedante, pode verificar os Buildins também
'a' in vars(__builtins__)
Eu acho que é melhor evitar a situação. É mais limpo e claro escrever:
a = None
if condition:
a = 42
try:
a # does a exist in the current namespace
except NameError:
a = 10 # nope
Uma situação possível em que isso pode ser necessário:
Se você está usando finally
bloco para fechar as conexões, mas no try
Bloco, o programa sai com sys.exit()
antes da conexão ser definida. Neste caso, o finally
O bloco será chamado e a instrução de fechamento de conexão falhará, pois nenhuma conexão foi criada.
Para este caso em particular, é melhor fazer a = None
ao invés de del a
. Isso diminuirá a contagem de referência ao objeto a
foi (se houver) atribuído e não falhará quando a
não está definido. Observe que del
A declaração não chama o destruidor de um objeto diretamente, mas desvincie -o da variável. O destruidor de objeto é chamado quando a contagem de referência se tornou zero.