Рассмотрим следующий код:
#!/usr/bin/env python3.7
from typing import NamedTuple, Set
class Person(NamedTuple):
name: str
fred: Set[str]
p = Person("Phil", set())
print(p)
my_dict = {}
my_dict[p] = 10
print(my_dict)
которая выдает эту ошибку
Traceback (most recent call last):
File "./temp.py", line 14, in <module>
my_dict[p] = 10
TypeError: unhashable type: 'set'
В данном случае это пример кода, и я сильно упростил его, поэтому его
довольно легко увидеть, откуда исходит ошибка. typed.NamedTuple
Очевидный, вычисляет свой хеш на основе всех его переменных экземпляров.
и один из них является набором. Когда я обнаружил это, однако, это было
больно выслеживать.
Итак, мой вопрос: почему сообщение об ошибке показывает это? Если это
не быть TypeError: unhashable type: 'Person'
. И почему
обратная связь не приходит из недр питона где-то, где
ошибка на самом деле.