> The code which raises TypeError does not know whether it was called
internally by dict or set method or explicitly by hash

It's true, but I don't think it would be too hard to preserve some of the
context in some of those common cases. In that bug report, I suggested
adding an optional parameter for the format string used to generate the
error message to PyObject_Hash and PyObject_HashNotImplemented (but I
haven't yet tried to sketch out a full code change).

That doesn't fully cover the case where hash calls hash recursively, and
obviously we wouldn't want to handle that in a way that potentially mucks
with the performance of hash functions.

> do any existing built in error message have links in them?

I don't think so, which is maybe a reason to avoid the inconsistency. I
don't know whether that's the result of some intentional decision. I do
think it can be useful to have more direct links to documentation, though.

> at least add "unhashable" to the glossary -- after all, both "mutable"
and "immutable" are in there.

I think that's reasonable.

On Mon, Sep 28, 2020 at 11:41 AM Christopher Barker <[email protected]>
wrote:

> On Mon, Sep 28, 2020 at 6:34 AM Samuel Freilich via Python-ideas <
> [email protected]> wrote:
>
>> The message does not include:
>>
>> * The word "hashable" verbatim, which appears in the glossary
>>
> * A link to https://docs.python.org/3/glossary.html#term-hashable
>>
>
> That's a pretty good entry that does talk about the importance of
> hashability in dicts and sets. So making it easier to find might be enough
> to help here.
>
> So +1 on adding that link to the error message (if, in fact, links in
> error messages are on the table at all -- do any existing built in error
> message have links in them?
>
> and/or at least add "unhashable" to the glossary -- after all, both
> "mutable" and "immutable" are in there.
>
> -CHB
>
>
>
>
>
>
>
>
>
>> * A suggestion of what to do instead
>>
>> For example:
>> TypeError: dict keys must be hashable (
>> https://docs.python.org/glossary.html#term-hashable), 'list' is not.
>> Consider using a primitive type (e.g. int, str) or immutable sequence (e.g.
>> tuple, frozenset).
>>
>> (That could be too much stuff, my point is I think there's room for
>> improvement over "unhashable type: 'list'".)
>>
>> I filed a bug about this (https://bugs.python.org/issue41114), but it
>> was closed by a core contributor, who suggested discussing that on this
>> list instead. While it's true that you can Google the error message and
>> find the relevant information, I think the error message text would be
>> worth improving.
>>
>> Peace,
>> -Sam
>> _______________________________________________
>> Python-ideas mailing list -- [email protected]
>> To unsubscribe send an email to [email protected]
>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/[email protected]/message/B6OMGYIM47OVGOCZLEY3MEUJDFURJRDV/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
>
> --
> Christopher Barker, PhD
>
> Python Language Consulting
>   - Teaching
>   - Scientific Software Development
>   - Desktop GUI and Web Development
>   - wxPython, numpy, scipy, Cython
>
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/YVXEYKK5A76QTCNNSZP2DMSHPKBGFEYV/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to