web-dev-qa-db-fra.com

Déterminer si la variable est définie dans Python

Duplicate possible:
n 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 savoir si une variable a été définie à un endroit particulier du code au moment de l'exécution? Cela n’est pas toujours évident car (1) la variable peut être définie de manière conditionnelle et (2) la variable peut être supprimée de manière conditionnelle. Je cherche quelque chose comme defined() dans Perl ou isset() dans PHP ou defined? dans Ruby.

if condition:
    a = 42

# is "a" defined here?

if other_condition:
    del a

# is "a" defined here?
367
user102008
try:
  thevariable
except NameError:
  print "well, it WASN'T defined after all!"
else:
  print "sure, it was defined."
574
Alex Martelli

'a' in vars() or 'a' in globals()

si vous voulez être pédant, vous pouvez aussi vérifier les fonctions intégrées
'a' in vars(__builtins__)

312
John La Rooy

Je pense qu'il vaut mieux éviter la situation. C'est plus propre et plus clair d'écrire:

a = None
if condition:
    a = 42
117
divegeek
try:
    a # does a exist in the current namespace
except NameError:
    a = 10 # nope
15
sc45

Une situation possible où cela pourrait être nécessaire:

Si vous utilisez le bloc finally pour fermer des connexions, mais dans le bloc try, le programme se ferme avec sys.exit() avant que la connexion ne soit définie. Dans ce cas, le bloc finally sera appelé et l'instruction de fermeture de la connexion échouera car aucune connexion n'a été créée.

5
xsreality

Dans ce cas particulier, il est préférable de faire a = None au lieu de del a. Cela décrémentera le nombre de références sur l'objet a était (le cas échéant) attribué à et n'échouerait pas lorsque a n'est pas défini. Notez que l'instruction del n'appelle pas le destructeur d'un objet directement, mais le dissocie de la variable. Le destructeur d'objet est appelé lorsque le compte de références est devenu zéro.

4
Denis Otkidach