ValueError: invalid literal for float(): -1.#IND (pickle.py)
Grant Edwards
invalid at invalid.invalid
Mon Jul 12 10:51:53 EDT 2010
On 2010-07-12, Alexander Eisenhuth <newsuser at stacom-software.de> wrote:
> python: 2.5.1
> palttform: winXP
>
> I'm using pickle.dump and pickle.load with data that is created in a
> wrapped (boost.python) piece of C++ code. pickle.dump works fine.
> pickle.load creates the following exception:
>
> [...]
> data = pickle.load(input)
> File "C:\Python25\lib\pickle.py", line 1370, in load
> return Unpickler(file).load()
> File "C:\Python25\lib\pickle.py", line 858, in load
> dispatch[key](self)
> File "C:\Python25\lib\pickle.py", line 954, in load_float
> self.append(float(self.readline()[:-1]))
> ValueError: invalid literal for float(): -1.#IND
>
> - I'm not sure what -1.#IND means.
That's an infinity.
> Can somebody assist?
In Python 2.x, pickle doesn't handle infinities and NaNs.
> - As pickle write the data I'm a bit confused, that is can't be
> unpickled it. Is that a bug or a feature?
IMO, it's a bug. It's been fixed in 3.x.
> BTW: I'm tied to version 2.5 of python
If you want to pickle floating point data that includes infinities and
NaNs, you need to write your own handler for floating point values.
When pickling you need to check for infinities and NaNs and output
some defined strings. When unpickling, you need to check for those
strings and generate infinities and NaNs as appropriate.
The CPython 2.x version of pickle just uses the underlying C library
routines to print and parse floating point values. If those libraries
are broken in the way that they represent infinity and NaN, then
pickle is broken in the same manner. Windows standard libraries are
broken. When formatting floating point values, it produces strings
that it can't parse as input.
IIRC, Linux works better -- but if you want something that you know is
going to work (and work cross-platform), then you need to write your
own floating point pickle/unpickle methods, and hook them into the
pickle module.
--
Grant Edwards grant.b.edwards Yow! Uh-oh!! I'm having
at TOO MUCH FUN!!
gmail.com
More information about the Python-list
mailing list