Sim - use math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Antes do Python 3.5, podia-se usar float("nan")
(não diferencia maiúsculas de minúsculas).
Observe que verificar se duas coisas que são NaN são iguais uma à outra sempre retornará falso. Isso ocorre em parte porque duas coisas que "não são um número" não podem (estritamente falando) ser iguais uma à outra - consulte Qual é a razão para todas as comparações retornarem falso para valores IEEE754 NaN? para mais detalhes e informações.
Em vez disso, use math.isnan(...)
se precisar determinar se um valor é NaN ou não.
Além disso, a semântica exata da ==
operação no valor NaN pode causar problemas sutis ao tentar armazenar NaN dentro de tipos de contêiner como list
ou dict
(ou ao usar tipos de contêiner personalizados). Consulte Verificando a presença de NaN em um contêiner para obter mais detalhes.
Você também pode construir números NaN usando o módulo decimal do 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(...)
também funcionará com objetos decimais.
No entanto, você não pode construir números NaN no módulo de frações do 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.
Aliás, você também pode fazer float('Inf')
, Decimal('Inf')
ou math.inf
(3.5+) para atribuir um número infinito. (E veja também math.isinf(...)
)
No entanto, fazer Fraction('Inf')
ou Fraction(float('inf'))
não é permitido e lançará uma exceção, assim como NaN.
Se você deseja uma maneira rápida e fácil de verificar se um número não é NaN nem infinito, você pode usar a math.isfinite(...)
partir do Python 3.2+.
Se você quiser fazer verificações semelhantes com números complexos, o cmath
módulo contém um conjunto de funções e constantes semelhantes ao math
módulo: