[Python-Dev] Pickling failure on Enums
Ethan Furman
ethan at stoneleaf.us
Tue May 14 23:13:00 CEST 2013
On 05/14/2013 01:58 PM, Guido van Rossum wrote:
> On Tue, May 14, 2013 at 1:09 PM, Ethan Furman <ethan at stoneleaf.us> wrote:
>> On 05/13/2013 11:32 AM, Guido van Rossum wrote:
>>>
>>>
>>> But now you enter a different phase of your project, or one of your
>>> collaborators does, or perhaps you've released your code on PyPI and one of
>>> your users does. So someone tries to pickle some class instance that
>>> happens to contain an unpicklable enum. That's not a great experience.
>>> Pickling and unpickling errors are often remarkably hard to debug.
>>> (Especially the latter, so I have privately admonished Ethan to ensure that
>>> if the getframe hack doesn't work, the pickle failure should happen at
>>> pickling time, not at unpickle time.)
>>
>>
>> I can get pickle failure on members created using the functional syntax with
>> no module set;
>
> That's the case I care most about.
Good, 'cause that one is handled. :)
>> I cannot get pickle failure on those same classes;
>
> I suppose you mean "if you create the same enums using class syntax"?
> Sounds fine to me.
No. Example class:
--> Example = Enum('Example', 'example ie eg') # no module name given, frame hack fails
--> pickle(Example.ie)
# blows up
--# pickle(Example)
# succeeds here, but unpickle will fail
>> I cannot get pickle failure on class syntax enums that inherit complex types
>> (such as the NEI class in the tests).
>
> Is the NEI base class picklable?
No. If it is, then the derived enum is also picklable (at least the variation I have tested, which is when the NEI base
class has __getnewargs__).
I'm really hoping you'll say that can be a documentation issue. ;)
--
~Ethan~
More information about the Python-Dev
mailing list