【问题标题】:Using type hinting in Python 3.4 vs Python 3.5 gives syntax error在 Python 3.4 和 Python 3.5 中使用类型提示会产生语法错误
【发布时间】:2017-11-21 09:00:51
【问题描述】:

我在不同的服务器上使用 Pycharm 和 Python 3.4 来执行我制作的脚本。我在我的代码中使用类型提示。现在,我工作中的某个人在 Python 3.5 安装上执行了我的代码,并且在我的类型提示中遇到了语法错误。我不会“故意”在 Python 3.4 IE 中使用任何模块进行类型提示我没有使用类型模块。

def run(iargs) -> int:
               ^ syntax error

会不会是 Python 3.4 甚至没有读取 3.5 的这些标签。 ?

编辑

我做了以下测试

Python 3.4.3 (default, Oct 28 2016, 10:12:53)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def Add(r,l) -> int:
...   return int(r + l)
...
>>> Add(3,5)
8
>>>

Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def Add(r,l) -> int:
...   return int(r + l)
...
>>> Add(3,5)
8

所以关于 python 3.4 或 3.5 的版本没有问题,但是当我执行我的脚本时,我得到以下内容

  File "test.py", line 235
    def run(iargs) -> int:
                   ^
SyntaxError: invalid syntax

问候

【问题讨论】:

  • 是的,Python 3.4 不理解类型提示的语法。
  • 这就是为什么它只能在 3.4 中“工作”?我在pycharm中使用它。但是语法有什么问题,为什么它在 3.5 中不起作用,因为我猜它应该?
  • 当它工作时你没有在 3.4 中运行它。三重检查使用的口译员。
  • 我是。我知道我正在运行 3.4.3,因为我只安装了这个版本。问题是我们的一位开发人员在他自己的测试服务器上使用我的脚本。
  • Python 3.4 支持该语法,但它们只是函数注释 (PEP 3107) 而不是类型提示 (PEP 484)。

标签: python-3.x type-hinting


【解决方案1】:

Python 3.4 不支持内联类型注解。您使用的语法是在 3.5 及更高版本中引入的

如果你想让类型注释在 3.4 中工作,你需要像这样给它们添加注释:

def run(iargs) # type: (str) -> str

除此之外,您还需要从pypi 安装typing 模块。另外值得注意的是,注释中的类型提示不向前兼容 >=3.5

【讨论】:

  • 与 OP 所说的导致语法错误的同一行代码相比,我认为这行代码没有任何区别。
  • 哦,我的错,cmets 在复制粘贴时消失了。
  • 这不是真的! 3.0新增函数注解:python.org/dev/peps/pep-3107
  • 除了 falcojr 说的(这似乎是对的——我刚刚测试过 Python 3.4 没有错误),你为什么说它与 Python >= 3.5 不兼容?无论如何,这只是一个评论。如果不明白,这是正常的评论。而且我认为类型提示(评论与否)在 Python 解释器上并没有真正做任何事情。我认为它们只对 IDE(如 PyCharm)和/或试图理解程序的人有用。如果我错了,请纠正我。我仍然需要学习完整的 Python 课程。
猜你喜欢
  • 2019-01-18
  • 1970-01-01
  • 2017-06-19
  • 2021-07-28
  • 2020-10-18
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 2015-10-17
相关资源
最近更新 更多