Python 3.5 类型化的 NamedTuple 语法产生 SyntaxError

Posted

技术标签:

【中文标题】Python 3.5 类型化的 NamedTuple 语法产生 SyntaxError【英文标题】:Python 3.5 typed NamedTuple syntax produces SyntaxError 【发布时间】:2017-06-19 13:07:27 【问题描述】:

当我尝试新输入的namedtuple 语法时,我收到SyntaxError: invalid syntax 错误:

class Employee(NamedTuple):
    name: str
    id: int

在 Python 3.5.2 中,尽管根据 the documentation 它应该从 3.5+ 开始有效。我错过了什么吗?我在代码中从typing 导入了NamedTuple

【问题讨论】:

【参考方案1】:

声明您正在使用的nameid 字段类型的语法需要Python 3.6 or up。 Python 3.5 不支持所需的变量级类型提示。

来自typing.NamedTuple documentation:

3.6 版更改:添加了对PEP 526 变量注释语法的支持。

使用文档中也包含的向后兼容语法

Employee = NamedTuple('Employee', [('name', str), ('id', int)])

因此将字段名称列为(name, type) 元组。

如果您使用的是 Python 3.5,则可能需要切换到 Python 3.5 version of the documentation(左上角有一个选择器,或者您可以将 URL 中的 3 替换为 3.5) .

【讨论】:

在文档顶部说“3.5 版中的新功能”。编辑哦,我明白了...这是每个部分。 @daj:是的,typing 模块是 Python 3.5 中的新模块。注释变量的附加语法(如此处用于将name 声明为stridint)需要Python 3.6。 @daj:如果您使用的是 Python 3.5,则可以切换到特定于版本的文档:docs.python.org/3.5/library/typing.html#typing.NamedTuple。请注意那里的 URL 中的3.5

以上是关于Python 3.5 类型化的 NamedTuple 语法产生 SyntaxError的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.5+中的递归类型[重复]

python 3.5代码中的变量需要类型注释

Python 3.5类型提示动态生成的实例属性

Python 3.5 类型注解

python 3.5+中的类型提示克隆函数

使用 python 3.5 样式类型注释进行鸭子打字