Hi list
I have found what appears to be a bug in the pickle and cPickle library in
pypy. I can reproduce it both on linux and mac. Basically, I can't unpickle
a file if it has been pickled with a file object returned by open(), but it
works if I use the with construct. The problem is present both using pickle
and cPickle.
On mac, the pypy version is
Python 2.7.3 (87aa9de10f9c, Nov 24 2013, 20:57:21)
[PyPy 2.2.1 with GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)]
On linux, the pypy version is
Python 2.7.3 (2.2.1+dfsg-1, Jan 24 2014, 10:12:37)
[PyPy 2.2.1 with GCC 4.6.3]
*#import cPickle as pickle*
*import pickle*
*l = range(10)*
*# fails:*
*try:*
* pickle.dump(l, open('f', 'wb'))*
* print pickle.load(open('f', 'rb'))*
*except EOFError:*
* print("Yup, that's an EOFError")*
*#succeeds*
*with open('f', 'wb') as f:*
* pickle.dump(l, f)*
*with open('f', 'rb') as f:*
* print pickle.load(f)*
If I instead of using open() inline in the argument to pickle assign it to
a variable and explicitly close the file after calling pickle.dump, then
the problem goes away:
* f = open('f', 'wb')*
* pickle.dump(l, f)*
* f.close()*
* print pickle.load(open('f', 'rb'))*
Apparently, in the first code snippet, the file isn't closed as it should
be when the object returned by open() goes out of scope after pickle.dump.
Thanks,
/Martin Koch
_______________________________________________
pypy-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-dev