non-pep585-annotation (UP006)
源自 pyupgrade linter。
有时提供修复。
作用
检查是否使用了可以基于 PEP 585 用标准库变体替换的泛型。
为什么这不好?
PEP 585 启用了 Python 标准库中的集合(例如 list
)直接用作泛型,而无需从 typing
模块导入类似的成员(例如 typing.List
)。
如果可用,应该使用 PEP 585 语法,而不是从 typing
模块导入成员,因为它更简洁易读。从 typing
导入这些成员被认为是自 PEP 585 以来已弃用的。
当目标 Python 版本为 3.9 或更高版本时,此规则启用(参见:target-version
)。默认情况下,如果存在 from __future__ import annotations
,则对于更早的 Python 版本也启用此规则,因为 __future__
注释不会在运行时评估。如果您的代码依赖于运行时类型注释(直接或通过 Pydantic 等库),您可以通过将 lint.pyupgrade.keep-runtime-typing
设置为 true
,来为 3.9 之前的 Python 版本禁用此行为。
示例
建议改为
修复安全性
此规则的修复被标记为不安全,因为它可能在 Python 3.9 之前的 Python 版本上,与依赖于运行时类型注释的库(如 Pydantic)一起使用时,导致运行时错误。