Comment puis-je vérifier si une variable existe?
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.
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.
une façon simple est de l'initialiser d'abord en disant myVar = None
puis plus tard:
if myVar is not None:
# Do something
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 = ...
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
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
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.
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
...
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
essayez:`
Myvariable = ['v', 'a', 'r']
try:
print(Myvariable)
except Nameerror:
print('variable \"Myvariable\" not found')
espérons que cette aide!