在我正在进行的一个项目中,我们广泛使用类型提示。我们现在正在更新到 python 3.9,其扩展的类型提示功能在 PEP 585 中定义。在测试更改时我遇到了一个有趣的问题。
PEP 585 指出:
不推荐从打字中导入这些内容。由于 PEP 563 以及尽量减少输入对运行时影响的目的,此弃用不会生成 DeprecationWarnings。相反,当被检查程序的目标版本被标记为 Python 3.9 或更高版本时,类型检查器可能会警告此类已弃用的用法。建议在整个项目范围内消除这些警告。
但是在包含旧打字方式的代码上运行 mypy(例如:
tp.List[str]
而不是 list[str]
)mypy 不会引发弃用警告或任何类型的警告。
我错过了什么?
根据 mypy 维护者的说法,此功能将不会被实现,因为它已经由像
ruff
: 这样的格式化程序实现了
这已经由 Ruff 等 linter 实现(https://docs.astral.sh/ruff/rules/non-pep585-annotation/)。这并不意味着 mypy 也不能实现对此类检查的支持,但这确实意味着 mypy 添加此功能的投资回报率较低。