У меня есть простая функция, которая преобразует набор строк в словарь:
def decoder(text)
return dict(enumerate(text))
Я хочу убедиться, что с подсказкой типа разработчики передают set
строк:
def decoder(text: Set[str]) -> Dict[int, str]:
return dict(enumerate(text))
Это вызывает следующее предупреждение в PyCharm:
Неожиданный тип (ы): (enumerate [str]) Возможные типы: (Mapping) (Iterable [Tuple [Any, Any]])
Похоже, что dict(...)
не соответствует типу enumerate[str]
, а PyCharm жалуется, потому что это недопустимый тип для словаря. Что меня смущает, потому что перечисление набора должно привести к кортежу правильного типа.
Предупреждение исчезнет, если я просто введу подсказку, что text
является set
:
def decoder(text: set) -> Dict[int, str]:
return dict(enumerate(text))
Вышесказанное работает, но ничто не предупреждает разработчиков не передавать Set[int]
или другие неожиданные типы.
Что я могу здесь делать неправильно?