[ python-Bugs-1188175 ] Pickle with HIGHEST_PROTOCOL "ord() expected..."

SourceForge.net noreply at sourceforge.net
Fri Apr 22 19:01:20 CEST 2005


Bugs item #1188175, was opened at 2005-04-22 12:02
Message generated for change (Comment added) made by tim_one
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1188175&group_id=5470

Category: Python Library
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: Heiko Selber (drhok)
Assigned to: Nobody/Anonymous (nobody)
Summary: Pickle with HIGHEST_PROTOCOL "ord() expected..."

Initial Comment:
A Python script that I wrote contains a tree-like data 
structure that cannot be unpickled when pickled with 
protocol==-1 (or 2).

I attached the smallest example I could find.

If run with pickle, the result is:

Traceback (most recent call last):
  File "D:\src\misc\CDROM\python\pickletest.py", line 
68, in ?
    tree=load( f )
  File "C:\Python23\lib\pickle.py", line 1390, in load
    return Unpickler(file).load()
  File "C:\Python23\lib\pickle.py", line 872, in load
    dispatch[key](self)
  File "C:\Python23\lib\pickle.py", line 1189, in 
load_binput
    i = ord(self.read(1))
TypeError: ord() expected a character, but string of 
length 0 found

But with cPickle, the result is:

Traceback (most recent call last):
  File "D:\src\misc\CDROM\python\pickletest.py", line 
68, in ?
    tree=load( f )
EOFError

Small changes in the datastructure lead to different 
results: try changing the line
if level<4:
to
if level<1:

Now cPickle works, but not pickle.

This happens with Python 2.3.3 and 2.3.5 on Windows 
XP.


----------------------------------------------------------------------

>Comment By: Tim Peters (tim_one)
Date: 2005-04-22 13:01

Message:
Logged In: YES 
user_id=31435

How did you open the file?  You must open files holding 
pickle data in binary mode on Windows (and should open 
them in binary mode on all platforms).  IOW, you must do

f = open(whatever, 'wb')

when opening a file to which you write a pickle, and must use

f = open(whatever, 'rb')

when opening a file from which you want to read a pickle.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1188175&group_id=5470


More information about the Python-bugs-list mailing list