为什么 Pylint 说 numpy.random 没有 'normal' 成员,因为它有?

Why Pylint says numpy.random does not have 'normal' member since it does?

此代码可以 运行 但得到了 vscode 的错误标记。

Pylint 是一个静态检查器,但 NumPy 可以动态导入子模块,例如 random。 这是 numpy/__init__.py:

的相关部分
from . import random
# skipped lines
__all__.extend(['linalg', 'fft', 'random', 'ctypeslib', 'ma'])

numpy/random.__init__.py中你可以找到这一行:

from .info import __doc__, __all__

进一步关注此曲目 numpy/random/info.py 包含:

__all__ = [
    # skipped lines
    'normal',
    # skipped lines
]

__init__.py 在第一次导入 numpy 期间执行。 列表 __all__ 包含 numpy 公开的名称。 此列表在 运行 时间扩展,因此 PyLint 无法真正静态地检查它。

different ways to turn the check of NumPy members off.