Sì, usa math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Prima di Python 3.5, si poteva usare float("nan")
(case insensitive).
Nota che il controllo per vedere se due cose che sono NaN sono uguali tra loro restituirà sempre false. Ciò è in parte dovuto al fatto che due cose che "non sono un numero" non possono (in senso stretto) essere considerate uguali tra loro - vedere Qual è il motivo per cui tutti i confronti restituiscono false per i valori NaN IEEE754? per maggiori dettagli e informazioni.
Utilizzare invece math.isnan(...)
se è necessario determinare se un valore è NaN o meno.
Inoltre, la semantica esatta ==
dell'operazione sul valore NaN può causare problemi sottili quando si tenta di archiviare NaN all'interno di tipi di contenitori come list
o dict
(o quando si utilizzano tipi di contenitori personalizzati). Vedere Verifica della presenza NaN in un contenitore per ulteriori dettagli.
Puoi anche costruire numeri NaN usando il modulo decimale di 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(...)
funzionerà anche con oggetti Decimal.
Tuttavia, non puoi costruire numeri NaN nel modulo delle frazioni di 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.
Per inciso, puoi anche fare float('Inf')
, Decimal('Inf')
o math.inf
(3.5+) per assegnare numeri infiniti. (E vedi anche math.isinf(...)
)
Tuttavia, fare Fraction('Inf')
o Fraction(float('inf'))
non è consentito e genererà un'eccezione, proprio come NaN.
Se vuoi un modo semplice e veloce per verificare se un numero non è né NaN né infinito, puoi usarlo a math.isfinite(...)
partire da Python 3.2+.
Se vuoi eseguire controlli simili con numeri complessi, il cmath
modulo contiene un insieme di funzioni e costanti simile al math
modulo: