跳到内容

未加引号的类型别名 (TC007)

源自 flake8-type-checking 代码检查器。

有时提供修复。

作用

检查 PEP 613 显式类型别名是否包含对运行时不可用符号的引用。

为什么这不好?

引用仅用于类型检查的符号会导致运行时出现 NameError

示例

from typing import TYPE_CHECKING, TypeAlias

if TYPE_CHECKING:
    from foo import Foo
OptFoo: TypeAlias = Foo | None

建议改为

from typing import TYPE_CHECKING, TypeAlias

if TYPE_CHECKING:
    from foo import Foo
OptFoo: TypeAlias = "Foo | None"

修复安全性

此规则的修复目前总是被标记为不安全,因为运行时类型库可能会尝试以我们无法在分析期间静态确定的方式访问/解析类型别名,并且依赖于类型别名不包含任何前向引用。

参考