跳到内容

non-pep604-annotation-union (UP007)

源自 pyupgrade linter。

有时提供修复。

作用

检查可以基于 PEP 604 语法重写的类型注解。

为什么这不好?

PEP 604 引入了一种基于 | 运算符的联合类型注解的新语法。 这种语法比之前的 typing.Uniontyping.Optional 语法更简洁易读。

当目标 Python 版本为 3.10 或更高版本时,此规则启用(参见:target-version)。默认情况下,如果存在 from __future__ import annotations,则对于较早的 Python 版本启用,因为 __future__ 注解不会在运行时进行评估。 如果您的代码依赖于运行时类型注解(直接或通过 Pydantic 等库),则可以通过将 lint.pyupgrade.keep-runtime-typing 设置为 true 来禁用 Python 3.10 之前版本的此行为。

示例

from typing import Union

foo: Union[int, str] = 1

建议改为

foo: int | str = 1

请注意,此规则仅检查 typing.Union 的用法,而 UP045 检查 typing.Optional

修复安全性

此规则的修复被标记为不安全,因为它可能会导致运行时错误,尤其是在 Python 3.10 之前的 Python 版本上,与依赖运行时类型注解的库(如 Pydantic)一起使用时。 它还可能导致类型不支持 | 运算符的异常且可能不正确的类型注解中出现运行时错误。

Options (选项)