Python 3.x 为什么VSCode显示';问题';哪些是不存在的?

Python 3.x 为什么VSCode显示';问题';哪些是不存在的?,python-3.x,visual-studio-code,Python 3.x,Visual Studio Code,我正在使用带有python扩展的VSCode。“问题”选项卡、“资源管理器”选项卡上的指示器以及代码视图本身中的红色下划线都显示存在错误,即使错误不是真实的 将matplotlib.pyplot导入为plt后,代码使用plt.cm.RdBu。VSCode显示的错误是matplotlib.cm没有成员RdBu 这里有两个问题: 除非我弄错了,plt.cm.RdBu应该等同于matplotlib.pyplot.cm.RdBu,而不是matplotlib.cm.RdBu。这似乎是错误的解释 但不管怎

我正在使用带有python扩展的VSCode。“问题”选项卡、“资源管理器”选项卡上的指示器以及代码视图本身中的红色下划线都显示存在错误,即使错误不是真实的

matplotlib.pyplot
导入为
plt
后,代码使用
plt.cm.RdBu
。VSCode显示的错误是
matplotlib.cm
没有成员
RdBu

这里有两个问题:

  • 除非我弄错了,
    plt.cm.RdBu
    应该等同于
    matplotlib.pyplot.cm.RdBu
    ,而不是
    matplotlib.cm.RdBu
    。这似乎是错误的解释
  • 但不管怎样,
    cm
    pyplot.cm
    实际上都有一个名为
    RdBu
    的属性,我可以通过使用
    help()
    来提取信息。代码运行良好,python不会抛出错误

为什么VSCode告诉我这是一个错误,而它不是?这只是一个bug还是一个配置错误?

不幸的是,似乎没有办法解决这个问题。VS Code,或者更具体地说,Python扩展使用的linter没有拾取matplotlib.pyplot.cm.RdBu,或者cm中定义的任何其他颜色映射,这是因为它们是动态定义的。如果您尝试查看
cm.py
,您只会发现:

cmap\u d=\u gen\u cmap\u d()
局部变量().更新(cmap\u d)

本质上,这些颜色映射不是像
RdBu=…
那样静态定义的,而是通过在运行时注入模块的全局名称空间来动态定义的。尽管在运行它时这可以正常工作,但不幸的是,这意味着linter在运行时之前无法知道名称空间中存在诸如
RdBu
之类的名称。由于大多数linter(如
pylint
flake8
等)都是静态代码分析工具,无法实际执行代码,因此它们无法检测这些颜色映射的存在。

您的机器上有多个版本的Python吗?类似的导入问题以前也曾发生在我身上,因为VS代码在默认情况下被配置为使用不同于我用来运行代码的Python版本。左下角的Python版本是否与使用
python3--version
获得的版本相同?
python3--version
不会显示任何内容
python--version
返回了3.8.3,与VSCode使用的相同(如左下角所示)。此外,我在VSCode中运行代码,因此无论如何它都应该使用相同的版本。