[Python-Dev] Standardize error message for non-pickleable types

MRAB python at mrabarnett.plus.com
Tue Oct 30 13:59:29 EDT 2018


On 2018-10-30 08:12, Serhiy Storchaka wrote:
> 29.10.18 23:17, MRAB пише:
>> 1. If you're pickling, then saying "pickle" is more helpful.
>> 
>> 2. In English the usual long form is "cannot". Error messages tend to 
>> avoid abbreviations, and also tend to have lowercase after the colon, e.g.:
>> 
>>      "ZeroDivisionError: division by zero"
>> 
>>      "ValueError: invalid literal for int() with base 10: 'foo'"
>> 
>> 3. If it's failing on an object (singular), then it's clearer to say 
>> "object".
>> 
>> 4. Articles tend to be omitted.
>> 
>> 5. Error messages tend to have quotes around the type name.
>> 
>> Therefore, my preference is for:
>> 
>>      "cannot pickle 'XXX' object"
> 
> Thank you Matthew, I'll use your variant.
> 
> Will something change the fact that in all these cases the pickling will
> be failed not just for specific object, but for all instances of the
> specified type?
> 
Well, the other examples you gave did not say explicitly that all 
instances of that type would fail.

If you look at what 'hash' says:

 >>> hash(())
3527539
 >>> hash(([]))
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

that would suggest "TypeError: unpicklable type: 'list'", but I'm not 
sure I'd like too much of "unpicklable", "unmarshallable", 
"unserializable", etc. :-)


More information about the Python-Dev mailing list