Eric Huss wrote: > Some subclasses of Exception are no longer pickleable in Python 2.5. An > example: > [snip] > > 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: 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? Ziga _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com