首页 > 编程问答 >运行 python 3 代码时出现 python 2 语法错误

运行 python 3 代码时出现 python 2 语法错误

时间:2024-07-23 12:50:16浏览次数:16  
标签:python python-2.7 python-typing

我有一个如下所示的类

class ExperimentResult(BaseDataObject):
    def __init__(self, result_type: str, data: dict, references: list):
        super().__init__()
        self.type = result_type
        self.references = references
        self.data = data

    def __repr__(self):
        return str(self.__dict__)

代码是用 python 3 编写的,而我尝试在 python 2 中运行它。 当我运行它时,我得到

    def __init__(self, result_type: str, data: dict, references: list):
                                  ^
SyntaxError: invalid syntax

是否有“import_from_future”来解决这个问题?


你看到的错误是由于 Python 2 中不支持 类型提示 造成的。类型提示是在 Python 3 中引入的,它允许你在函数参数和返回值中指定类型。

在你的代码中, result_type: str data: dict references: list 都是类型提示。Python 2 不理解这些,所以会引发 SyntaxError

你有几个选择来解决这个问题:

  1. 如果可以的话,使用 Python 3 运行代码。 这是最简单的解决方案,因为你的代码已经是有效的 Python 3 代码。

  2. 如果必须使用 Python 2,请删除类型提示。 这将使你的代码与 Python 2 兼容,但你会失去类型提示的好处。你的代码如下所示:

class ExperimentResult(BaseDataObject):
    def __init__(self, result_type, data, references):
        super().__init__()
        self.type = result_type
        self.references = references
        self.data = data

    def __repr__(self):
        return str(self.__dict__)
  1. 使用类型注释工具,如 MyPy 这将允许你在 Python 2 代码中使用类型提示,但你需要使用 MyPy 等工具来分别检查类型。

没有 import_from_future 可以解决这个问题。 __future__ 模块允许你使用在未来 Python 版本中引入的特性,但它不能用于引入在以前版本中不存在的特性,比如类型提示。

标签:python,python-2.7,python-typing
From: 45709184

相关文章

  • 如何让 python 类型检查器知道它应该返回其类的新实例?
    我想使用classmethod返回当前类的新实例,并且我尝试了如下代码,但它引发了NameError('name'T'isnotDefined')PutthecodeT=TypeVar('T',bound=A)on|||以上也不起作用。classA有什么好主意来处理它吗?Isthereanygoodideatohandleit?......
  • 由于循环依赖而导致的Python注释错误
    我有两个相互依赖的类,并且无需注释即可正常工作。不幸的是,当我尝试注释返回值时,它会导致预期循环依赖错误。Network.pydefprocessors(self)->List[Processor]:#implementationProcessor.pydefnetwork(self)->Network:......
  • 如何在python中发送带有请求的“multipart/form-data”?
    如何在Python中使用multipart/form-data发送requests?如何发送文件,我明白,但是如何通过这种方法发送表单数据无法理解。可以使用Python中的requests库来发送multipart/form-data请求。说得对,requests库可以轻松发送文件,并且发......
  • 我安装了哪个版本的 Python?
    我必须在Windows服务器上运行Python脚本。我如何知道我拥有哪个版本的Python,这真的很重要吗?我正在考虑更新到最新版本的Python。确定在Windows服务器上安装的Python版本至关重要,因为它可以确定脚本的兼容性和可用库。以下是检查方法:使用命令提......
  • @classmethod 在 Python 的类之外做什么?
    在下面的代码中,如果存在@classmethod注释,则允许内部defnew()代替目标的__new__()--但该类会传递两次。如果@classmethod被删除,那么我们会收到类似“”的错误。@classmethod这里在做什么,有没有办法不用它?(我的动机是清晰的:我不理......
  • 三种语言实现快速选择(C++/Python/Java)
    题目给定一个长度为......
  • 如何让SublimeText支持Python 3的注释?
    我测试了SublimeText2和3,两者都有错误:如果您测试此代码,您会注意到:之后的所有代码都不会正确突出显示语法。deffoo(a,b)->str:#Nothinggetsproperlycoloredfromhere#Abunchofcode…return"bar"我发现了一些链接,解释了如何......
  • 如何用可变长度注释Python列表
    如何为可变长度或None的Python列表编写注释?当我这样写时,它会返回一个错误。defsome_function(params:list[str,...])#thisgiveserror:`TypeError:'type'objectisnotsubscriptable`defsome_function(params:List[str,...])#thisalsogiveserro......
  • Python 协议和 Django 模型
    假设我有一个简单的协议A和一个未能实现该协议的类B:fromtypingimportProtocolclassA(Protocol):deffoo(self)->str:...classB:pass当下面的代码进行类型检查时,Mypy将正确地抱怨x:A=B()mypy.error:Incompatibletypes......
  • Python字段的字符串注释
    Python是否支持类字段的任何类型的字符串注释?例如,在Golang中,我可以定义这样的结构,带有可选的字符串标签:typeUserstruct{Namestring`example:"name"`}我需要在Python中定义一个新类,其中包含包含点.的字段名称。我希望可能有某种方法来注释字段,或者......