Sí, use math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Antes de Python 3.5, se podía usar float("nan")
(no distingue entre mayúsculas y minúsculas).
Tenga en cuenta que comprobar si dos cosas que son NaN son iguales entre sí siempre devolverá falso. Esto se debe en parte a que no se puede decir (estrictamente hablando) que dos cosas que "no son un número" sean iguales entre sí; consulte ¿Cuál es el motivo de que todas las comparaciones devuelvan falsas para los valores de NaN IEEE754? para más detalles e información.
En su lugar, utilícelo math.isnan(...)
si necesita determinar si un valor es NaN o no.
Además, la semántica exacta de la ==
operación en el valor de NaN puede causar problemas sutiles al intentar almacenar NaN dentro de tipos de contenedores como list
o dict
(o cuando se utilizan tipos de contenedores personalizados). Consulte Comprobación de la presencia de NaN en un contenedor para obtener más detalles.
También puede construir números NaN usando el módulo decimal 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(...)
también funcionará con objetos Decimal.
Sin embargo, no puede construir números NaN en el módulo de fracciones 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.
Por cierto, también puede hacer float('Inf')
, Decimal('Inf')
o math.inf
(3.5+) para asignar números infinitos. (Y ver también math.isinf(...)
)
Sin embargo, hacerlo Fraction('Inf')
o Fraction(float('inf'))
no está permitido y generará una excepción, como NaN.
Si desea una forma rápida y fácil de verificar si un número no es NaN ni infinito, puede usarlo a math.isfinite(...)
partir de Python 3.2+.
Si desea realizar comprobaciones similares con números complejos, el cmath
módulo contiene un conjunto similar de funciones y constantes que el math
módulo: