python 3.5代码中的变量需要类型注释
Posted
技术标签:
【中文标题】python 3.5代码中的变量需要类型注释【英文标题】:Need type annotation for variable in python 3.5 code 【发布时间】:2017-11-20 18:53:49 【问题描述】:我在我的 python 3.5 代码中使用mypy
,我收到了很多如下所示的消息:
文件:行号:错误:变量需要类型注释
但我在python 3.6
中读到了新功能,它仅在python 3.6
中引入了变量注释的语法:
PEP 484 引入了函数参数类型注释的标准,也就是类型提示。这个 PEP 为 Python 添加了用于注释变量类型的语法,包括类变量和实例变量...
如果我尝试在python 3.5
程序中为我的变量添加变量类型注释,它会抛出SyntaxError
。
我该怎么办?忽略此消息?更新到python 3.6
?为什么mypy
编译我的代码就像写在python 3.6
中一样?
【问题讨论】:
【参考方案1】:使用 cmets 对变量类型进行注解
x = 5 # type: int
my_list = [] # type: List[str]
检查备忘单
https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html
【讨论】:
正是我想要的。请注意,在 Python 3.6 上,flake8
表示在内联注释之前需要 2 个空格,因此(例如)我必须将 x = 5 # type: int
(#
之前的单个空格)更改为 x = 5 # type: int
(@ 之前的两个空格987654327@).
Pylance 要求相同【参考方案2】:
您的代码混淆了mypy
尝试执行的类型推断。例如,在下面的 sn-p 中重新定义一个名称,不允许 mypy 推断出f
的类型:
f = []
f =
由于它无法理解f
的类型应该是什么,它会抱怨并告诉你它需要一个变量的注解。您可以通过以下方式显式提供类型提示:
mypy
没有在3.6
中编译,这个错误在两个版本中都存在。不同之处在于您如何解决它。
【讨论】:
@YuvalPruss 如果您打算使用变量注释,请查看此处***.com/questions/39971929/… 了解更多信息。【参考方案3】:如果你有空值,你必须定义变量的类型。例如:
my_val: str = ""
my_val1: dict =
my_val2: list = []
等等。在你的情况下,我会考虑将 python 的版本更改为 3.6 并且需要更新代码。
【讨论】:
【参考方案4】:mypy
文档提到空集合通常需要针对某些复杂情况进行类型注释。
https://mypy.readthedocs.io/en/stable/common_issues.html#types-of-empty-collections
【讨论】:
以上是关于python 3.5代码中的变量需要类型注释的主要内容,如果未能解决你的问题,请参考以下文章