Oui - utilisez math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Avant Python 3.5, on pouvait utiliser float("nan")
(insensible à la casse).
Notez que vérifier si deux choses qui sont NaN sont égales l'une à l'autre retournera toujours false. Ceci est en partie dû au fait que deux choses qui ne sont "pas un nombre" ne peuvent (à proprement parler) être égales l'une à l'autre - voir Quelle est la justification de toutes les comparaisons retournant false pour les valeurs NaN IEEE754? pour plus de détails et d'informations.
À la place, utilisez math.isnan(...)
si vous avez besoin de déterminer si une valeur est NaN ou non.
En outre, la sémantique exacte de l' ==
opération sur la valeur NaN peut entraîner des problèmes subtils lors de la tentative de stockage de NaN dans des types de conteneurs tels que list
ou dict
(ou lors de l'utilisation de types de conteneurs personnalisés). Voir Vérification de la présence de NaN dans un conteneur pour plus de détails.
Vous pouvez également construire des nombres NaN en utilisant le module décimal de Python :
>>> from decimal import Decimal
>>> b = Decimal('nan')
>>> print(b)
NaN
>>> print(repr(b))
Decimal('NaN')
>>>
>>> Decimal(float('nan'))
Decimal('NaN')
>>>
>>> import math
>>> math.isnan(b)
True
math.isnan(...)
fonctionnera également avec les objets Decimal.
Cependant, vous ne pouvez pas construire de nombres NaN dans le module de fractions de Python :
>>> from fractions import Fraction
>>> Fraction('nan')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35\lib\fractions.py", line 146, in __new__
numerator)
ValueError: Invalid literal for Fraction: 'nan'
>>>
>>> Fraction(float('nan'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35\lib\fractions.py", line 130, in __new__
value = Fraction.from_float(numerator)
File "C:\Python35\lib\fractions.py", line 214, in from_float
raise ValueError("Cannot convert %r to %s." % (f, cls.__name__))
ValueError: Cannot convert nan to Fraction.
Incidemment, vous pouvez également faire float('Inf')
, Decimal('Inf')
ou math.inf
(3.5+) pour attribuer des nombres infinis. (Et voir aussi math.isinf(...)
)
Cependant faire Fraction('Inf')
ou Fraction(float('inf'))
n'est pas autorisé et lèvera une exception, tout comme NaN.
Si vous voulez un moyen rapide et facile de vérifier si un nombre n'est ni NaN ni infini, vous pouvez l'utiliser à math.isfinite(...)
partir de Python 3.2+.
Si vous souhaitez effectuer des vérifications similaires avec des nombres complexes, le cmath
module contient un ensemble de fonctions et de constantes similaire au math
module: