Comment puis-je vérifier si une variable existe?

je veux vérifier si une variable existe. Maintenant je fais quelque chose comme ça:

try:
   myVar
except NameError:
   # Do something.

y a-t-il d'autres moyens sans exception?

636
demandé sur martineau 2009-05-09 17:10:31

10 réponses

Pour vérifier l'existence d'une variable locale:

if 'myVar' in locals():
  # myVar exists.

Pour vérifier l'existence d'une variable globale:

if 'myVar' in globals():
  # myVar exists.

pour vérifier si un objet a un attribut:

if hasattr(obj, 'attr_name'):
  # obj.attr_name exists.
1139
répondu Ayman Hourieh 2009-05-09 13:16:05

l'utilisation de variables qui n'ont pas été définies ou définies (implicitement ou explicitement) est presque toujours une mauvaise chose dans tout langue car elle indique que la logique du programme n'a pas été pensée à travers correctement, et est susceptible d'entraîner un comportement imprévisible.

l'astuce suivante, qui est similaire à la vôtre, assurera qu'une variable a une certaine "valeur 151930920" avant d'utiliser:

try:
    myVar
except NameError:
    myVar = None
# Now you're free to use myVar without Python complaining.

cependant, je ne pense toujours pas que ce soit une bonne idée - à mon avis, vous devriez reformuler votre code afin que cette situation ne se produise pas.

86
répondu paxdiablo 2017-12-11 00:01:21

une façon simple est de l'initialiser d'abord en disant myVar = None

puis plus tard:

if myVar is not None:
    # Do something
20
répondu Chinedum Ukejianya 2018-01-10 19:42:28

utilisant try/except est la meilleure façon de tester l'existence d'une variable. Mais il y a presque certainement une meilleure façon de faire ce que vous faites que de configurer/tester des variables globales.

par exemple, si vous voulez initialiser une variable au niveau du module la première fois que vous appelez une fonction, vous êtes mieux avec le code quelque chose comme ceci:

my_variable = None

def InitMyVariable():
  global my_variable
  if my_variable is None:
    my_variable = ...
17
répondu 2009-05-09 13:27:55

pour les objets / modules, vous pouvez aussi

'var' in dir(obj)

par exemple,

>>> class Something(object):
...     pass
...
>>> c = Something()
>>> c.a = 1
>>> 'a' in dir(c)
True
>>> 'b' in dir(c)
False
13
répondu Wyrmwood 2014-10-28 18:39:57

je supposerai que le test va être utilisé dans une fonction, similaire à réponse de l'utilisateur 97370 . Je n'aime pas cette réponse parce qu'elle pollue l'Espace-nom mondial. Une façon de le corriger est d'utiliser une classe à la place:

class InitMyVariable(object):
  my_variable = None

def __call__(self):
  if self.my_variable is None:
   self.my_variable = ...

Je n'aime pas cela, parce que cela complique le code et ouvre des questions comme, est-ce que cela devrait confirmer au modèle de programmation Singleton? Heureusement, Python a permis à des fonctions d'avoir des attributs pour un tandis que, ce qui nous donne cette solution simple:

def InitMyVariable():
  if InitMyVariable.my_variable is None:
    InitMyVariable.my_variable = ...
InitMyVariable.my_variable = None
8
répondu samwyse 2017-05-23 12:26:38

catch est appelé except en Python. d'autres que c'est bien pour des cas aussi simples. Il y a le AttributeError qui peut être utilisé pour vérifier si un objet a un attribut.

6
répondu SilentGhost 2009-05-09 13:28:06

une façon qui fonctionne souvent bien pour gérer ce genre de situation est de ne pas vérifier explicitement si la variable existe, mais juste aller de l'avant et envelopper le premier usage de la variable éventuellement non existante dans un essai / sauf NameError:

# Search for entry.
for x in y:
  if x == 3:
    found = x

# Work with found entry.
try:
  print('Found: {0}'.format(found))
except NameError:
  print('Not found')
else:
  # Handle rest of Found case here
  ...
5
répondu Roger Dahl 2010-09-08 03:05:58

c'est juste un ajout aux réponses précédentes pour vérifier si une clé est présente en JSON/Dict ou non en python.""

'Json/Dict nom de l'objet'.has_key('nom de la clé')

cela retournera vrai ou faux

4
répondu Arun Ravindranath 2016-10-31 04:30:49

essayez:`

Myvariable = ['v', 'a', 'r']
try:
    print(Myvariable)
except Nameerror:
    print('variable \"Myvariable\" not found')

espérons que cette aide!

-2
répondu F. Taylor 2016-08-07 11:43:52