Tak - użyj math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Przed Pythonem 3.5 można było używać float("nan")
(bez rozróżniania wielkości liter).
Zauważ, że sprawdzenie, czy dwie rzeczy, które są NaN są sobie równe, zawsze zwróci fałsz. Dzieje się tak po części dlatego, że o dwóch rzeczach, które „nie są liczbą”, nie można (ściśle rzecz biorąc) powiedzieć, że są sobie równe - zobacz: Jakie jest uzasadnienie dla wszystkich porównań zwracających fałsz dla wartości NaN IEEE754?aby uzyskać więcej szczegółów i informacji.
Zamiast tego użyj math.isnan(...)
jeśli chcesz określić, czy wartość to NaN, czy nie.
Ponadto dokładna semantyka ==
operacji na wartości NaN może powodować subtelne problemy podczas próby przechowywania NaN wewnątrz typów kontenerów, takich jaklist
lub dict
(lub podczas korzystania z niestandardowych typów kontenerów). Aby uzyskać więcej informacji, zobacz Sprawdzanie obecności NaN w kontenerze .
Możesz również konstruować liczby NaN, używając dziesiętnych znaków Pythona modułu :
>>> 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(...)
będzie również działać z obiektami Decimal.
Jednak nie można konstruować liczb NaN w module ułamków Pythona :
>>> 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.
Nawiasem mówiąc, możesz także zrobić float('Inf')
, Decimal('Inf')
lub math.inf
(3,5+), aby przypisać nieskończone liczby. (A także zobaczmath.isinf(...)
)
Jednak robi Fraction('Inf')
lubFraction(float('inf'))
nie jest dozwolone i spowoduje zgłoszenie wyjątku, podobnie jak NaN.
Jeśli chcesz szybko i łatwo sprawdzić, czy liczba nie jest ani NaN, ani nieskończona, możesz użyć math.isfinite(...)
od wersji Python 3.2+.
Jeśli chcesz wykonać podobne sprawdzenia na liczbach zespolonych, cmath
moduł zawiera podobny zestaw funkcji i stałych jak math
moduł: