17

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

4

4 回答 4

30

使用注释来注释变量类型

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

检查备忘单

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

于 2017-06-18T13:52:49.927 回答
9

mypy您的代码混淆了试图做的类型推断。例如,在以下代码段中重新定义名称,不允许 mypy 推断 的类型f

f = []
f = {}

由于它无法理解f应该是什么类型,它会抱怨并告诉您它需要对变量进行注释。您可以显式提供类型提示:

  • Python 3.5 的类型注释。
  • Python 3.6 的变量注释

mypy没有编译3.6,这个错误在两个版本中都存在。不同之处在于你如何解决它。

于 2017-06-18T14:01:32.403 回答
2

如果您有空白值,则必须定义变量的类型。例如:

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

等等。在你的情况下,我会考虑将 python 的版本更改为 3.6 并且需要更新代码。

于 2019-09-16T13:02:31.117 回答
0

mypy文档提到空集合通常需要针对某些复杂情况进行类型注释。

https://mypy.readthedocs.io/en/stable/common_issues.html#types-of-empty-collections

于 2021-08-13T01:23:32.927 回答