EOFError why print(e) cannot print out any information ?

Peter Otten __peter__ at web.de
Wed Dec 26 07:21:18 EST 2012


iMath wrote:

> f = open('UsersInfo.bin','rb')
> while True:
>         try:
>                 usrobj = pickle.load(f)
>         except EOFError as e:
>                 print(e)
>                 break
>         else:
>                 usrobj.dispuser()
> f.close()
 
> why print(e) cannot print out any information ?

Because the relevant code in pickle doesn't supply an error message; it's 
just

raise EOFError

While you can add the information yourself by subclassing the Unpickler...

class MyUnpickler(pickle.Unpickler):
    def __init__(self, file, **kw):
        super().__init__(file, **kw)
        self.file = file
    def load(self):
        try:
            return super().load()
        except EOFError:
            raise EOFError("EOFError: Reached end of {}".format(self.file))

with open('UsersInfo.bin','rb') as f:
    load = MyUnpickler(f).load
    while True:
        try:
            usrobj = load()
        except EOFError as e:
            print(e)
            break
        else:
            usrobj.display()

... it might be a good idea to make a feature request on 
<http://bugs.python.org>.




More information about the Python-list mailing list