Ja - verwenden math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Vor Python 3.5 konnte man verwenden float("nan")
(ohne Berücksichtigung der Groß- und Kleinschreibung).
Beachten Sie, dass die Überprüfung, ob zwei Dinge, die NaN sind, einander gleich sind, immer false zurückgibt. Dies liegt zum Teil daran, dass zwei Dinge, die "keine Zahl" sind, (genau genommen) nicht gleich sein können - siehe Was ist der Grund für alle Vergleiche, die für IEEE754-NaN-Werte falsch zurückgeben? Weitere Details und Informationen.
Verwenden math.isnan(...)
Sie stattdessen, wenn Sie feststellen müssen, ob ein Wert NaN ist oder nicht.
Darüber hinaus kann die genaue Semantik der ==
Operation für den NaN-Wert subtile Probleme verursachen, wenn versucht wird, NaN in Containertypen wie list
oder zu speicherndict
(oder bei Verwendung benutzerdefinierter Containertypen) . Weitere Informationen finden Sie unter Überprüfen des Vorhandenseins von NaN in einem Behälter .
Sie können NaN-Zahlen auch mit Pythons Dezimalzahl erstellen :
>>> 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(...)
funktioniert auch mit Dezimalobjekten.
Sie können jedoch keine Python-Zahlen im Python- Fraktionsmodul erstellen:
>>> 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.
Im übrigen können Sie auch tun float('Inf')
, Decimal('Inf')
oder math.inf
(3.5+) unendliche Zahlen zuzuordnen. (Und siehe auch math.isinf(...)
)
Jedoch zu tun Fraction('Inf')
oder Fraction(float('inf'))
nicht erlaubt und wird eine Ausnahme auslösen, genau wie NaN.
Wenn Sie schnell und einfach überprüfen möchten, ob eine Zahl weder NaN noch unendlich ist, können Sie sie verwenden math.isfinite(...)
ab Python 3.2+ verwenden.
Wenn Sie ähnliche Prüfungen mit komplexen Zahlen durchführen möchten, cmath
enthält das Modul einen ähnlichen Satz von Funktionen und Konstanten wie das math
Modul: