
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
participants (2)
-
Maciej Fijalkowski
-
Martin Koch