Требовать список определенного типа в mypy - PullRequest
0 голосов
/ 22 апреля 2020

Допустим, у меня есть функция, которая может принимать только список строк, например:

from typing import List


def iter_lower(lst: List[str]) -> List[str]:
    new_lst = []
    for string in lst:
        new_lst.append(string.lower())
    return new_lst

lst: List = ["Hello", "World", 1]
iter_lower(lst)

mypy не жалуется на это, хотя это явно неправильно, поскольку lst это обобщенный список c, содержащий целое число, которое несовместимо с .lower(). Есть ли какая-то подсказка, которую я мог бы использовать в списке аргументов iter_lower, которая заставит mypy отклонить это использование?

1 Ответ

1 голос
/ 22 апреля 2020

Проблема в подсказке типа List. Без параметра типа это интерпретируется как List[Any], отключая проверки, которые вы хотели. (Any - это тип "не проверяй меня".)

Если вы хотите, чтобы mypy рассматривал lst как "список произвольно смешанных типов с проверкой типов", вам следует использовать List[object].

...