web-dev-qa-db-fra.com

Façon pythonique de vérifier si quelque chose existe?

C'est assez basique mais je codais et commençais à me demander s'il existait un moyen pythonique de vérifier si quelque chose n'existait pas. Voici comment je le fais si c'est vrai:

var = 1
if var:
    print 'it exists'

mais quand je vérifie si quelque chose n'existe pas, je fais souvent quelque chose comme ça:

var = 2
if var:
    print 'it exists'
else:
    print 'nope it does not'

Cela semble être un gaspillage si tout ce qui m'importe, c'est de savoir s'il est possible de vérifier si quelque chose n'existe pas sans rien d'autre.

43
Lostsoul

Style LBYL, "regarde avant de sauter":

var_exists = 'var' in locals() or 'var' in globals()

Style EAFP, "plus facile de demander pardon que permission":

try:
    var
except NameError:
    var_exists = False
else:
    var_exists = True

Préférez le second style (EAFP) lors du codage en Python, car il est généralement plus fiable. 

104
wim

Je pense que vous devez faire attention à votre terminologie, que quelque chose existe et que quelque chose est égal à Faux sont deux choses différentes. En supposant que vous souhaitiez ce dernier, vous pouvez simplement faire:

if not var:
   print 'var is False'

Pour les premiers, ce serait le moins élégant:

try:
   var
except NameError:
   print 'var not defined'

Je vais faire un saut et tenter, cependant, que tout ce qui vous donne envie de vérifier si une variable est définie peut probablement être résolu de manière plus élégante. 

20
Paolo Bergantino

Si c'est un dictionnaire, vous pouvez avoir 

mydict['ggg'] = ''   // doesn't matter if it is empty value or not.
if mydict.has_key('ggg'):
   print "OH GEESH"

Cependant, has_key() est complètement supprimé de Python 3.x, par conséquent, la méthode Python consiste à utiliser in

'ggg' in mydict     # this is it!
# True if it exists
# False if it doesn't

Vous pouvez également utiliser in pour Tuple, list et set.


Bien sûr, si la variable n'a pas été définie, vous devrez lever une exception en mode silencieux (il suffit de lever n'importe quelle exception ... laissez-la passer), si l'exception n'est pas ce que vous voulez voir (ce qui est utile pour de nombreuses applications, il vous suffit de vous connecter à l'exception.)


Il est toujours prudent de définir une variable avant de l’utiliser (vous rencontrerez "affectation avant la référence locale" qui signifie "var n’est pas dans la portée" en clair). Si vous faites quelque chose avec une requête, vous voudrez peut-être avoir un dictionnaire et vérifier si une clé existe ou non, utilisez in.

3
CppLearner

Pour vérifier si une var a été définie:

var = 2

try: 
    varz
except NameError:
    print("No varz")

Pour vérifier si c'est non/faux

if varz is None

...ou 

if not varz
2
Calvin Froedge

Qu'en est-il de la négation?

if not var:
    print 'nope it does not'

Bien que cela soit pour voir si le var est faux/aucun et exploserait si var n'est pas défini.

Pour voir si var est défini:

try:
    var
except NameError:
    print 'not defined'
1
manojlds
if not var:
    #Var is None/False/0/

if var:
    #Var is other then 'None/False/0'

en Python si varibale a une valeur quelconque de None/False/0 alors la condition If var échouera ...

et pour les autres objets, elle appellera la méthode __nonzero__ Pythonic qui peut renvoyer True ou False en fonction de ses fonctionnalités.

0
avasal