Comment "tester" NoneType en python?

j'ai une méthode qui renvoie parfois une valeur Non-Type. Alors comment puis-je questionner une variable qui est un non-Type? J'ai besoin d'utiliser le si la méthode, par exemple

if not new:
    new = '#'

je sais que c'est la mauvaise voie et j'espère que vous comprenez ce que j'ai voulu dire.

239
demandé sur thefourtheye 2014-04-15 18:16:07

5 réponses

alors comment puis-je remettre en question une variable qui N'est pas un type?

utiliser is opérateur, comme ceci

if variable is None:

pourquoi cela fonctionne-t-il?

depuis None est le seul objet singleton de NoneType en Python, nous pouvons utiliser is opérateur pour vérifier si une variable a None en elle ou pas.

citant de is docs ,

Les opérateurs is et is not test de l'identité de l'objet: x is y est vrai si et seulement si x et y sont le même objet. x is not y donne la valeur de vérité inverse.

Puisqu'il ne peut y avoir qu'une seule instance de None , is serait le moyen préféré pour cochez la case None .


entendre de la bouche du cheval

citant Python's Coding Style Guidelines - PEP-008 (conjointement défini par Guido lui-même),

les comparaisons avec des lettres uniques comme None doivent toujours être faites avec is ou is not , jamais l'égalité les opérateurs .

372
répondu thefourtheye 2015-08-22 03:30:39
if variable is None:
   print 'Is None'

--

if variable is not None:
   print 'Isn\'t None'
47
répondu elhoucine 2014-04-15 14:28:12

Il peut également être fait avec isinstance que par Alex Hall réponse :

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance est aussi intuitif, mais il y a la complication qu'il nécessite la ligne

NoneType = type(None)

qui n'est pas nécessaire pour les types comme int et float .

10
répondu cardamom 2018-01-26 15:13:41

la façon la plus simple cependant, sans la ligne supplémentaire en plus de cardamome réponse est probablement:

isinstance(x, type(None))

alors comment puis-je questionner une variable qui N'est pas un type? J'ai besoin de l'utiliser si la méthode

utilisant isinstance() ne nécessite pas un is dans le if - déclaration:

if isinstance(x, type(None)): 
    #do stuff

informations supplémentaires

Vous pouvez également vérifier la présence de plusieurs types dans une seule déclaration isinstance() , comme indiqué dans la documentation "1519260920 . Il suffit d'écrire les types comme un tuple.

isinstance(x, (type(None), bytes))
2
répondu Martin Müsli 2018-09-05 14:23:44

Python 2.7 :

x = None
isinstance(x, type(None))

ou

isinstance(None, type(None))

= = > True

0
répondu FrancoisR 2018-09-21 09:04:14