On 2006-11-29, Bart Ogryczak <B.********@gmail.comwrote:
I´ve got this problem with pickle, it seems it doesn´t handle
correctly infinite values (nor does Python return
overflow/underflow error). What could I do about it?
Here's what I did. I'm sure it'll fall down on some systems,
but it works on Linux and Windows.
__________________________________________________ ____________________
# unpickle can't handle nan/inf/ind floats, so we need to
# handle that ourselves
def myload_float(self):
s = self.readline()[:-1]
try:
f = float(s)
except ValueError:
s = s.upper()
if s in ["1.#INF", "INF"]:
f = 1e300*1e300
elif s in ["-1.#INF", "-INF"]:
f = -1e300*1e300
elif s in ["NAN","1.#QNAN","-1.#QNAN","QNAN","1.#IND","IND","-1.#IND"]:
f = (1e300*1e300)/(1e300*1e300)
else:
raise ValueError, "Don't know what to do with "+`s`
self.append(f)
# unpickle routine that overrides the float load method
def unpickle(f):
unpickler = pickle.Unpickler(f)
unpickler.dispatch[pickle.FLOAT] = myload_float
return unpickler.load()
__________________________________________________ ____________________
--
Grant Edwards grante Yow! I represent a
at sardine!!
visi.com