> 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 _______________________________________________ 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