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?
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top