Требуется аннотация типа для переменной в коде Python 3.5

Я использую mypy в своем коде на Python 3.5, и у меня много сообщений, которые выглядят следующим образом:

файл: номер строки: ошибка: требуется аннотация типа для переменной

Но я читал о новых функциях в python 3.6, что синтаксис для аннотаций переменных представлен только в python 3.6:

PEP 484 представил стандарт для аннотаций типов параметров функций, также известный как подсказки типов. Этот PEP добавляет синтаксис к Python для аннотирования типов переменных, включая переменные класса и переменные экземпляра ...

И если я пытаюсь добавить аннотации типа переменных к моим переменным в программе python 3.5, она выдает SyntaxError.

Что я должен делать? Игнорировать это сообщение? Обновить до python 3.6? Почему mypy компилирует мой код так, как будто он написан на python 3.6?


person Yuval Pruss    schedule 18.06.2017    source источник


Ответы (3)


Ваш код сбивает с толку вывод типа, который пытается сделать mypy. Например, переопределение имени, как в следующем фрагменте, не позволяет mypy определять тип f:

f = []
f = {}

Поскольку он не может понять, каким должен быть тип f, он жалуется и сообщает вам, что ему нужна аннотация для переменной. Вы можете явно предоставить подсказку типа с помощью:

  • Комментарий типа для Python 3.5.
  • Аннотация переменных для Python 3.6

mypy не компилируется в 3.6, эта ошибка существует в обеих версиях. Разница в том, как с этим справиться.

person Dimitris Fasarakis Hilliard    schedule 18.06.2017
comment
@YuvalPruss Если вы планируете использовать аннотации переменных, посмотрите здесь stackoverflow.com/questions/39971929/, чтобы подробнее узнать об этом. - person Dimitris Fasarakis Hilliard; 18.06.2017

Используйте комментарии для аннотации типа переменной

x = 5 # type: int
my_list = [] # type: List[str]

Проверить шпаргалку

https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html

person jOOsko    schedule 18.06.2017
comment
Именно то, что я искал. В одном примечании, в Python 3.6 flake8 говорится, что перед встроенным комментарием необходимо 2 пробела, поэтому (например) мне пришлось изменить x = 5 # type: int (одинарный пробел перед #) на x = 5 # type: int (двойной пробел перед #). - person edesz; 08.08.2019

Если у вас есть пустое значение, вы должны определить тип переменной. Например:

my_val: str = ""
my_val1: dict = {}
my_val2: list = []

и т.д. В вашем случае я подумаю об изменении версии python на 3.6, и потребуется обновить код.

person porto    schedule 16.09.2019