Так - використовувати 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, рівні одна одній, завжди повертатиметься помилково. Це частково тому, що дві речі, які "не є числом", не можна (суворо кажучи) сказати, рівними одна одній - див. Яке обґрунтування для всіх порівнянь, що повертають помилкові значення 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
модуль: