In case of heavily recursive data structure cPickle produces intermittent random exceptions (AttributeError, etc.). The expected is RuntimeError: ('maximum recursion depth exceeded in ...'). In addition, the behavior differs for classic/new classes. The reason: the cPickle needs several optional methods (__getstate__, __getinitargs__) for each object. In their absence an AttributeError is generated. It is normally suppressed, but suppression itself causes recursion. The error in exception processing leads to fancy errors. The proposed solution: temporary (for call of PyErr_ExceptionMatches()) increase recursion limit.
Georg, I think that your recent change in r71024 implements the same idea directly in PyErr_ExceptionMatches. Can you confirm this and close the issue?