> 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/
