[Python-Dev] BaseException pickle issue
ziga.seilnacht at gmail.com
Sun Apr 1 15:51:51 CEST 2007
Eric Huss wrote:
> Some subclasses of Exception are no longer pickleable in Python 2.5. An
> Does anyone have any thoughts about this? Is it a bug?
> I can imagine one could argue that exceptions should call the base
> __init__ method to properly set args, but there are so many exceptions out
> there that do not do this that it would be very difficult to track them
> all down.
> I removed the __reduce__ and __setstate__ methods from BaseException and
> everything seems to just work. Pickling/unpickling works for all
> protocols whether or not you set self.args. Is this an appropriate
> solution? I'm not sure what the motivation for having these methods is.
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:
A better solution would be to move the initial args attribute assignment
to BaseException.__new__. See this patch:
Could you check if that fixes your problem?
More information about the Python-Dev