Nan med Python 2.5 på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan opretter jeg en Nan med Python 2.5 på Windows?


float('nan') mislykkes med fejlen ValueError: invalid literal for float(): nan


Resumé af svarene: Hverken float('inf') eller float('nan') fungerer sammen med Python 2.5 og Windows. Dette er en fejl, der blev rettet i Python 2.6.


Hvis du bruger numpy, kan du bruge numpy.inf og numpy.nan.


Hvis du har brug for en løsning uden følelse, kan du bruge et udtryk, der overløber som 1e1000 for at få en inf, og 1e1000 / 1e1000 eller 1e1000 - 1e1000 for at få en nan.

Bedste reference


En anden måde er at dele inf af sig selv:


>>> float('inf') / float('inf')
nan


Eller på en mere uklart måde, som muligvis ikke fungerer på tværs af platforme (men fungerer omkring den specifikke fejl i Python 2.5 på Windows):


>>> 1e31337 / 1e31337
nan
>>> 1e31337 - 1e31337
nan

Andre referencer 1


Der er allerede et accepteret svar på dette spørgsmål, men jeg tænker følgende skal fungere, hvis du ikke vil stole på overløb og har numpy installeret ... (ikke testet som jeg ikke har python2.5 eller windows)


>>> import numpy as np
>>> np.nan
nan
>>> np.inf
inf

Andre referencer 2


Opgrader din Python-distribution, hvis det er muligt. Opførelsen du opregnede betragtes som en fejl. (Bemærk: Cython link.) [16] [17]


Kanonisk skal Python understøtte denne definition af nan på tværs af platformen. Denne adfærd synes at være blevet rettet i Python 2.6 og 3.0.


(Yderligere læsning) [18]





Selvfølgelig virker dette i Linux-versionerne af Python:


$ python2.4
Python 2.4.3 (#1, Sep 21 2011, 19:55:41) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> float('nan')
nan

$ python2.5
Python 2.5.2 (r252:60911, Jun 26 2008, 10:20:40) 
[GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> float('nan')
nan