跳到内容

future-required-type-annotation (FA102)

派生自 flake8-future-annotations linter。

修复总是可用的。

作用

检查 Python 模块中使用 PEP 585 和 PEP 604 风格类型注解的情况,这些模块缺乏兼容旧 Python 版本所需的 from __future__ import annotations 导入。

为什么这不好?

在没有 from __future__ import annotations 导入的情况下使用 PEP 585 和 PEP 604 风格的注解,将会在低于 3.9 和 3.10 的 Python 版本上引起运行时错误。

通过添加 __future__ 导入,解释器将不再在评估时解释注解,从而使代码与过去和未来的 Python 版本兼容。

此规则遵守 target-version 设置。例如,如果您的项目目标版本是 Python 3.10 及以上,则添加 from __future__ import annotations 不会影响您利用 PEP 604 风格的联合类型(例如,将 Optional[str] 转换为 str | None)的能力。因此,如果您的项目目标版本是 Python 3.9 或更低版本,此规则才会标记此类用法。

示例

def func(obj: dict[str, int | None]) -> None: ...

建议改为

from __future__ import annotations


def func(obj: dict[str, int | None]) -> None: ...

修复安全性

此规则的修复被标记为不安全,因为添加 from __future__ import annotations 可能会更改程序的语义。

Options (选项)