跳到内容

未定义导出 (F822)

派生自 Pyflakes 代码检查器。

作用

检查 __all__ 中未定义的名称。

为什么这不好?

在 Python 中,__all__ 变量用于定义当模块以通配符导入时(例如,from foo import *)导出的名称。 __all__ 中的名称必须在模块中定义,但包含为字符串。

__all__ 中包含未定义的名称很可能在运行时引发 NameError,当导入模块时。

预览 中,即使这些名称隐式地指向包中的其他模块,此规则也会标记 __init__.py 文件中未定义的名称。依赖隐式导出的用户应通过 lint.per-file-ignores__init__.py 文件中禁用此规则。

示例

from foo import bar


__all__ = ["bar", "baz"]  # undefined name `baz` in `__all__`

建议改为

from foo import bar, baz


__all__ = ["bar", "baz"]

参考