Issue 1498571: Correctly unpickle exceptions (original) (raw)

With recent changes to exception types, unpickling exceptions that were pickled with an older version of Python didn't restore all of the original attributes. Example:

Python 2.4.3 (#69, Mar 29 2006, 17:35:34) ...

import pickle f = open('jar', 'wb') e = Exception('cucumbers', 'cabbage') e.args ('cucumbers', 'cabbage') pickle.dump(e, f) f.close() f = open('jar', 'rb') e = pickle.load(f) f.close() e.args ('cucumbers', 'cabbage')

Python 2.5a2 (trunk:46539M, May 30 2006, 05:02:24) ...

import pickle f = open('jar', 'rb') e = pickle.load(f) f.close() e.args () e.dict['args'] ('cucumbers', 'cabbage')

The attached patch fixes this problem, by adding a setstate method to BaseException. I don't know if any new tests are needed, since pickling exceptions is already tested and new tests would require adding binary files to the test suite. I did some basic tests that I can attach if they are needed.