Déterminer si la variable est définie en Python [dupliquer]
Double Possible:
moyen Facile de vérifier que la variable est définie en python?
Comment puis-je vérifier si une variable existe en Python?
Comment savez-vous si une variable a été définie à un endroit précis du code à l'exécution? Ce n'est pas toujours évident parce que (1) la variable pourrait être de manière conditionnelle, et (2) la variable peut être conditionnellement supprimés. Je cherche quelque chose comme defined()
en Perl ou isset()
en PHP ou defined?
en Ruby.
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
7 réponses
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()
si vous voulez être pédant, vous pouvez vérifier les builtins aussi
'a' in vars(__builtins__)
je pense qu'il vaut mieux éviter la situation. C'est plus propre et plus clair d'écrire:
a = None
if condition:
a = 42
try:
a # does a exist in the current namespace
except NameError:
a = 10 # nope
Une situation où cela peut être nécessaire:
si vous utilisez finally
pour fermer les connexions mais dans le bloc try
, le programme sort avec sys.exit()
avant que la connexion ne soit définie. Dans ce cas, le bloc finally
sera appelé et la déclaration de fermeture de connexion échouera car aucune connexion n'a été créée.
pour ce cas particulier, il est préférable de faire a = None
au lieu de del a
. Ce compte de référence de décrément pour l'objet a
a été (s'il y a lieu) assigné à et ne sera pas échoué lorsque a
n'est pas défini. Notez que la déclaration del
n'appelle pas directement le destructeur d'un objet, mais le décroche de la variable. Le destructeur d'objet est appelé quand le nombre de référence est devenu zéro.
si l'on veut attraper des tentatives d'accéder à une variable non définie à l'intérieur d'un objet, il y a une façon très facile de le faire:
class Whatever(object):
def __getattr__(self, key):
return None
ici, python essaie d'abord de trouver un attribut dans l'objet ou l'arbre d'objets, et seulement si cela échoue la fonction __getattr__(self, key)
est appelée.
Cela signifie que, si __getattr__
est appelé nous pouvons simplement retourner None
.