是 – 使用float(‘nan’)或float(‘NaN’)。从Python 3.5开始,你也可以使用
math.nan。
>>> a = float('nan')
>>> print(a)
nan
>>> print(a + 2)
nan
>>> a == a
False
>>> import math
>>> math.isnan(a)
True
>>> # Python 3.5+
>>> math.isnan(math.nan)
True
相反,如果需要确定值是否为NaN,请使用math.isnan。
你也可以使用Python的decimal模块构造NaN数字:
>>> 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也将使用十进制对象。
然而,你不能在Python的fractions模块中构造NaN数字:
>>> from fractions import Fraction
>>> Fraction('nan')
Traceback (most recent call last):
File "", line 1, in
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 "", line 1, in
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。