[Python-Dev] BaseException pickle issue (original) (raw)

Žiga Seilnacht 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 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



More information about the Python-Dev mailing list