Mypy 错误:尚不支持 PEP 695 类型别名

问题描述 投票:0回答:1

我尝试在 Python 中通过 MyPy 使用类型别名时遇到错误。这是我的代码的简化版本:

type IntList = list[int]  # This line causes the error

type OtherType = int      # This line causes the error

class test:
    pass

type SomeType = test      # This line causes the error

我使用的是 Python 3.12,据说它支持 PEP 695 类型别名。我是否做错了什么,缺少导入,或者 Mypy 对 PEP 695 的支持不完整?


编辑: 如果我这样做的话,看起来我不会从 MyPy 中得到任何错误。

IntList: TypeAlias = list[int]

OtherType: TypeAlias = int

class test:
    pass

SomeType: TypeAlias = test

编辑: 如何在 Python 中为类型添加别名?

这是因为Python 3.9+中的选项吗?

python mypy python-typing python-3.12
1个回答
1
投票

PEP 695 未在 mypy 中实现<=1.10 yet (as the error message tries to say), the issue tracking that is here: https://github.com/python/mypy/issues/15238

因此,您可以在 Python 3.12 中使用

type x = y
并且解释器将可以工作,但使用任何现有版本的 mypy 检查类型将不起作用。

请注意,即使在最新的 mypy 中实现它,在 Python 3.11 上运行的 mypy 也可能不支持它。所以这个别名语法不会用在任何承诺支持 3.11 的地方。 向后兼容的代码需要使用旧样式或

TypeAliasType
(自 1.10 起在 mypy 中受支持)。

更新(2024 年 5 月):大量支持刚刚添加到主分支,可能会在 mypy 1.11 中发布。它仍然不完整,但更接近它(问题中的代码都有效)。它可能需要--enable-incomplete-feature=NewGenericSyntax

(但该标志在1.10.0中尚不存在,并且在1.11.0+dev中不需要)。

© www.soinside.com 2019 - 2024. All rights reserved.