在Python 3.4和Python 3.5中使用类型提示会导致语法错误

3

我使用Pycharm和Python 3.4在不同的服务器上执行自己编写的脚本。我的代码中有使用类型提示。现在,有人在Python 3.5安装上执行了我的代码,但是遇到了类型提示的语法错误。我并没有“故意”在Python 3.4中使用任何类型提示模块,即我没有使用typing模块。

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

问候


1
是的,Python 3.4不支持类型提示语法。 - Łukasz Rogalski
那么这就是为什么它只在3.4中“起作用”的原因?我在PyCharm中使用它。但是语法有什么问题,为什么它在3.5中不能工作呢?我猜应该可以的? - Ephreal
当它工作时,你没有在3.4中运行它。三重检查所使用的解释器。 - Łukasz Rogalski
我正在运行3.4.3版本,因为我只安装了这个版本,所以我知道。问题是我们的一个开发人员在他自己的测试服务器上使用了我的脚本。 - Ephreal
该语法在Python 3.4中得到支持,但它们仅仅是“函数注释”(PEP 3107),而不是“类型提示”(PEP 484)。 - Nuno André
@NunoAndré 我觉得差不多就可以了。至少我刚刚在一个使用 Python 3.9 的 Python 脚本上运行,现在它可以在 PyCharm 2020.3 上的 Python 3.4 上正常运行。我只需要安装 typing 模块就可以了,现在它已经可以正常运行了,没有任何语法错误。 - Edw590
1个回答

3

Python 3.4不支持内联类型注释。你使用的语法是在3.5及以上版本引入的。

如果你想让类型注释在3.4中工作,你需要将它们作为注释添加,如下所示:

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

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


我看不出这行代码与原帖中被指为语法错误的同一行有任何区别。 - robbpriestley
抱歉,复制粘贴时评论消失了。 - swistak
1
这不是真的!函数注解是在3.0中添加的:https://www.python.org/dev/peps/pep-3107/ - falcojr
除了falcojr所说的(看起来是对的,我刚测试了一下,在Python 3.4上没有错误),为什么您认为它不兼容Python> = 3.5?反正这只是一种注释。如果不能理解,那就是一个普通注释。我认为类型提示(无论是注释还是不注释)在Python解释器上实际上并没有做任何事情。我认为它们只对IDE(如PyCharm)和/或试图理解程序的人有用。如果我错了,请纠正我。我仍需完成关于Python的完整课程。 - Edw590

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接