Почему mypy не обнаруживает неправильное использование TypedDict внутри функции

У меня есть следующий модуль Python:

from typing import TypedDict

class P(TypedDict):
    x: int

def return_p() -> P:
    return {'x': 5}

p = return_p()
p['abc'] = 1

def test():
    p = return_p()
    p['abc'] = 2

Когда я запускаю на нем mypy, он справедливо жалуется на строку p['abc']=1, но игнорирует ту же проблему в строке p['abc']=2.

Это происходит в Windows 10 с Python 3.8 и mypy 0.781. То же самое происходит с Python 3.7 (мне нужно импортировать TypedDict из typing_extensions)

Что происходит?


person zmbq    schedule 22.06.2020    source источник


Ответы (1)


Это потому, что test() не набирается. Добавление подсказок типа к его подписи сделает его тело проверяемым:

def test() -> None:
    p = return_p()
    p['abc'] = 2
person hoefling    schedule 22.06.2020