[Python-Dev] BaseException pickle issue
Eric Huss
ehuss at ironport.com
Sun Apr 1 21:07:23 CEST 2007
> I think that this is a bug, but removing those methods is not the right
> solution. The __reduce__ method is needed because builtin exceptions
> don't store their attributes in the __dict__ anymore; if you remove it,
> then those attributes will be lost during pickling. The __setstate__
> method was added to help with unpickling old exceptions, which did store
> all their attributes in the __dict__. See this patch for details:
>
> http://www.python.org/sf/1498571
>
> A better solution would be to move the initial args attribute assignment
> to BaseException.__new__. See this patch:
>
> http://www.python.org/sf/1692335
>
> Could you check if that fixes your problem?
Thanks, it certainly does!
I wrote a very extensive unittest to try out various permutations. I'm
not sure if there's an expectation that pickled strings of user-defined
exceptions from previous versions work in newer versions. If you define
your own __init__ method, and try to load a pickled string from 2.4, I
still get a TypeError when trying to unpickle it. I will send you my test
file directly. This isn't a problem for me since we don't store pickled
exceptions.
-Eric
More information about the Python-Dev
mailing list