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

Eric Huss ehuss at ironport.com
Sun Apr 1 21:07:23 CEST 2007


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



More information about the Python-Dev mailing list