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