来自Pylint与 Pylance的误报(错误与警告)

编程语言 2026-07-11

下面给出一个最小可复现示例(MRE):

from selenium.webdriver import Chrome

with Chrome() as driver:
    pass

在VS Code中开发时我看到 Chrome() 下划线标注,好像有问题。Pylance说:

类型为 "ModuleType" 的对象不可调用
属性 "call" 未知(Pylance(reportCallIssue))

(import) Chrome: Any | ModuleType

并且Pylint说:

Chrome不可调用 (not-callable)

代码在没有错误的情况下运行。

所有模块/工具都已更新到最新版本。

我可以扩展该MRE,使用 driver.get()(带有效URL),并且它运行得非常顺畅。

这是怎么回事?

解决方案

所以这基本上是Lazy Loading的问题,如 @CoreyGoldberg所述:Chrome 只有在 webdriver 模块加载并且其初始化代码运行之后才会存在。

为了绕过这个问题,可以做一些TYPE_CHECKING的技巧;下面给出带有此技巧的代码:

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from selenium.webdriver.chrome.webdriver import WebDriver as Chrome
else:
    from selenium.webdriver import Chrome


with Chrome() as driver:
    pass

这应该能工作,因为与 selenium.webdriver 中的 Chrome 对象不同,selenium.webdriver.chrome.webdriver 中的 WebDriver 对象已经存在,因此可以被静态类型检查器发现。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章