【问题标题】:Why does VSCode show 'problems' which do not exist?为什么 VSCode 显示不存在的“问题”?
【发布时间】:2020-06-30 21:08:14
【问题描述】:

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

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

这里有两个问题:

  • 除非我弄错了,否则plt.cm.RdBu 应该等价于matplotlib.pyplot.cm.RdBu,而不是matplotlib.cm.RdBu。这似乎是错误的解释。
  • 但不管怎样,cmpyplot.cm 实际上都有一个名为RdBu 的属性,我能够提取使用help() 的信息。代码运行完美,python 没有抛出任何错误。

为什么 VSCode 告诉我这是一个错误,而实际上不是?这只是一个错误还是可能是错误配置?

【问题讨论】:

  • 你的机器上有多个版本的 Python 吗?我之前也遇到过类似的导入问题,因为默认情况下 VS Code 被配置为使用与我用来运行代码的版本不同的 Python 版本。左下角的 Python 版本是否与您使用 python3 --version 获得的版本相同?
  • python3 --version 什么也没发现。 python --version 返回 3.8.3,与 VSCode 使用的相同(如左下角所示)。此外,我在 VSCode 中运行代码,所以无论如何它都应该使用相同的版本。

标签: python-3.x visual-studio-code


【解决方案1】:

很遗憾,似乎没有办法解决这个问题。 VS Code,或者更具体地说,Python 扩展使用的 linter 没有选择 matplotlib.pyplot.cm.RdBucm 中定义的任何其他颜色图的原因是因为它们是动态定义的。如果您尝试查看 cm.py 内部,您只会发现:

cmap_d = _gen_cmap_d()
locals().update(cmap_d)

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

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2022-01-06
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多