J'ai une méthode qui renvoie parfois une valeur NoneType. Alors, comment puis-je remettre en question une variable qui est un NoneType? J'ai besoin d'utiliser la méthode if , par exemple
if not new:
new = '#'
Je sais que c'est la mauvaise façon et j'espère que vous comprenez ce que je voulais dire.
None
est la seule valeur que votre méthode renvoie pour laquellebool(returnValue)
est égalFalse
, celaif not new:
devrait fonctionner correctement. Cela se produit parfois dans lesre.match
bibliothèques intégrées - par exemple, retourne None ou un objet de correspondance véridique.null
etNone
en python ici .Réponses:
Utilisez l'
is
opérateur, comme ceciPourquoi ça marche?
Puisque
None
c'est le seul objet singleton deNoneType
Python, nous pouvons utiliser l'is
opérateur pour vérifier si une variable s'y trouveNone
ou non.Citant des
is
documents ,Puisqu'il ne peut y avoir qu'une seule instance de
None
,is
serait la meilleure façon de vérifierNone
.Écoutez-le de la bouche du cheval
Citant les directives de style de codage de Python - PEP-008 (défini conjointement par Guido lui-même),
la source
== None
etis None
?None
, ils donneront tous deux un résultat similaire.pandas
DataFrame existe - pour cela, j'utilisetype(df) is type(None)
pour éviter:The truth value of a DataFrame is ambiguous
la source
Cela peut également être fait avec
isinstance
selon la réponse d'Alex Hall :isinstance
est aussi intuitif mais il y a la complication qu'il nécessite la ligneNoneType = type(None)
qui n'est pas nécessaire pour les types comme
int
etfloat
.la source
NoneType
- classer et puisqu'ilNone
s'agit d'un singleton,isinstance
ne doit pas être utilisé pour détecterNone
- à la place, vous devez faire comme le dit la réponse acceptée, et utiliseris None
ouis not None
.Comme le souligne le commentaire d'Aaron Hall:
Réponse originale:
Le moyen le plus simple cependant, sans la ligne supplémentaire en plus de la réponse de la cardamome, est probablement:
isinstance(x, type(None))
L'utilisation
isinstance()
ne nécessite pas deis
dans laif
déclaration:Informations supplémentaires
Vous pouvez également rechercher plusieurs types dans une seule
isinstance()
instruction, comme indiqué dans la documentation . Écrivez simplement les types sous forme de tuple.la source
NoneType
- classer et puisqu'ilNone
s'agit d'un singleton,isinstance
ne doit pas être utilisé pour détecterNone
- à la place, vous devez faire comme le dit la réponse acceptée, et utiliseris None
ouis not None
.python 3.6.7
isinstance
ne pas utiliser? Je comprends que celais
devrait être préféré, mais il y a des cas où la forme isinstance semble plus naturelle (comme vérifier plusieurs types à la foisisinstance(x, (str, bool, int, type(None)))
). Est-ce simplement une préférence personnelle ou y a-t-il une mise en garde que je ne connais pas?type
2. puis appelez-la 3. puis recherchez le type deNone
- quandNone
est à la fois un singleton et un mot-clé. Un autre inconvénient: 4. ceci est très non standard et soulèvera les sourcils lorsque les gens regarderont votre code.x is None
est une vérification plus optimisée. Je suggéreraisx is None or isinstance(x, (str, bool, int))
- mais je suggérerais également que vous réfléchissiez davantage à ce que vous faites quand vous faites ce genre de vérification de type pour les types qui n'ont pas beaucoup en commun ...Je ne sais pas si cela répond à la question. Mais je sais que cela m'a pris du temps à comprendre. Je parcourais un site Web et tout à coup, le nom des auteurs n'était plus là. Il fallait donc une déclaration de vérification.
L'auteur peut être n'importe quelle variable dans ce cas, et
None
peut être n'importe quel type que vous recherchez.la source
None
est un singleton,type
ne doit pas être utilisé pour détecterNone
- à la place, vous devez faire comme le dit la réponse acceptée, et utiliseris None
ouis not None
.Python 2.7:
ou
==> Vrai
la source
NoneType
- classer et puisqu'ilNone
s'agit d'un singleton,isinstance
ne doit pas être utilisé pour détecterNone
- à la place, vous devez faire comme le dit la réponse acceptée, et utiliseris None
ouis not None
.J'espère que cet exemple vous sera utile)
Vous pouvez donc vérifier le type du nom de variable
la source