non-pep604-annotation-optional (UP045)
源自 pyupgrade linter。
有时提供修复。
作用
检查可以基于 PEP 604 语法重写的 typing.Optional
注释。
为什么这不好?
PEP 604 引入了一种基于 |
运算符的联合类型注释的新语法。这种语法比之前的 typing.Optional
语法更简洁易读。
当目标 Python 版本为 3.10 或更高版本时,此规则启用(参见:target-version
)。默认情况下,如果存在 from __future__ import annotations
,它也会为更早的 Python 版本启用,因为 __future__
注释不会在运行时求值。如果您的代码依赖于运行时类型注释(直接或通过像 Pydantic 这样的库),您可以通过将 lint.pyupgrade.keep-runtime-typing
设置为 true
来禁用 Python 3.10 之前版本上的此行为。
示例
建议改为
修复安全性
此规则的修复被标记为不安全,因为它可能会导致在 Python 3.10 之前的 Python 版本上,使用依赖于运行时类型注释的库(如 Pydantic)时出现运行时错误。它也可能导致类型不支持 |
运算符的不寻常且可能不正确的类型注释中的运行时错误。