来自Pylint与 Pylance的误报(错误与警告)
下面给出一个最小可复现示例(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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。