Да - пользуйтесь math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
До Python 3.5 можно было использовать float("nan")
(без учета регистра).
Обратите внимание, что проверка того, равны ли две вещи с NaN, всегда возвращает false. Отчасти это связано с тем, что две вещи, которые «не являются числами», нельзя (строго говоря) назвать равными друг другу - см. Каково обоснование всех сравнений, возвращающих false для значений NaN IEEE754? для получения более подробной информации.
Вместо этого используйте, math.isnan(...)
если вам нужно определить, является ли значение NaN или нет.
Кроме того, точная семантика ==
операции над значением NaN может вызвать тонкие проблемы при попытке сохранить NaN внутри типов контейнеров, таких как list
или dict
(или при использовании пользовательских типов контейнеров). Подробнее см. Проверка наличия NaN в контейнере .
Вы также можете создавать числа NaN, используя десятичный модуль 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(...)
также будет работать с объектами Decimal.
Однако вы не можете создавать числа NaN в модуле дробей 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.
Кстати, вы также можете использовать float('Inf')
, Decimal('Inf')
или math.inf
(3.5+), чтобы назначать бесконечные числа. (А также см. math.isinf(...)
)
Однако выполнение Fraction('Inf')
или Fraction(float('inf'))
запрещение разрешено и вызовет исключение, как и NaN.
Если вам нужен быстрый и простой способ проверить, не является ли число ни NaN, ни бесконечным, вы можете использовать math.isfinite(...)
Python 3.2+.
Если вы хотите выполнить аналогичные проверки с комплексными числами, cmath
модуль содержит такой же набор функций и констант, что и math
модуль: