PAYATHON 2026

为什么 Pylint 和 Pylance 提示 Selenium 的 Chrome 不可调用?

数据阿明

结论

这些提示表明,静态分析器无法确认 Chrome 是可调用对象。根据问题描述,实际运行时 Chrome() 正常,因此静态诊断与运行结果不一致。仅凭现有信息,无法确定问题出在哪个版本或哪一处导入解析。

粘贴的示例中,pass 缺少缩进。实际运行的代码应当是:

from selenium.webdriver import Chrome

with Chrome() as driver:
    pass

如果实际文件中也没有缩进,就会出现语法错误。这与不可调用诊断是两个问题。

为什么运行正常,编辑器却报错?

Pylance 给出的类型是:

Chrome: Any | ModuleType

其中 ModuleType 表示模块。普通模块不能像类或函数一样调用,因此,当 Pylance 认为 Chrome 可能是模块时,就会对 Chrome() 报出 reportCallIssue。

Pylint 的 not-callable 也表示其静态推断认为目标不可调用。不过,两个工具都报警,并不能证明它们遇到了完全相同的缺陷。

Python 执行时会加载实际模块,再从中取得对象;静态分析器则依赖源码、类型信息和导入解析来判断。包级重导出、类型信息不匹配、解释器选择或导入路径差异,都可能导致判断不一致。现有材料不足以确定具体原因。

先确认分析和运行使用的是同一套环境

在运行原代码的环境中执行:

import sys
import selenium
from selenium.webdriver import Chrome

print("Python:", sys.executable)
print("Selenium:", selenium.__file__)
print("Version:", getattr(selenium, "__version__", "unknown"))
print("Chrome:", Chrome)
print("Type:", type(Chrome))
print("Callable:", callable(Chrome))

检查以下内容:

  • VS Code 选择的 Python 解释器是否与 sys.executable 一致。
  • 如果 Pylint 通过单独配置的环境运行,其环境是否与项目一致。
  • selenium.__file__ 是否指向预期安装位置,项目中是否存在同名的 selenium.py 或 selenium 目录。
  • VS Code 中跳转到 Chrome 定义时,是否进入了预期的 Selenium 源码或类型声明。

“所有工具都是最新版”不能排除环境不一致,也不能单独证明某个工具存在缺陷。排查或提交问题时,应记录具体版本号。

尝试直接导入实现类

可以用下面的写法检查问题是否集中在包级导出的解析上:

from selenium.webdriver.chrome.webdriver import WebDriver as Chrome

with Chrome() as driver:
    pass

这里直接导入 Chrome 驱动的 WebDriver 类,并使用 Chrome 作为本地名称。

如果这种写法能够正常运行,相关诊断也消失了,就可以在当前环境中用它绕过问题。这个结果也支持继续检查原导入路径的重导出或类型解析,但还不能据此认定缺陷属于 Selenium、Pylance 或 Pylint。

如果诊断依旧存在,应继续检查解释器、搜索路径和类型声明来源。

什么时候可以忽略警告?

确认环境一致、导入来源正确,并验证实际对象可调用后,可以局部抑制这一处诊断。不要因为这一条提示就关闭整个项目的不可调用检查,否则可能隐藏其他真实错误。

如果准备报告问题,请附上缩进正确的最小示例、Python 与相关工具的具体版本,以及两种导入方式各自的诊断结果。这些信息比“已更新到最新版”更有助于定位原因。

备注:内容仅供参考。