> 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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4