为什么PyCharm提示Expected type 'Tag', got 'str' instead错误?
报错原因说明
该提示属于PyCharm静态类型推断的误判,运行时代码本身逻辑无问题,常见诱因如下:
- 变量
row缺少显式类型标注,或你使用的BeautifulSoup类型注解(stub)中,find等查询方法的返回值被定义为Tag | NavigableString | None联合类型。哪怕运行时实际取到的是Tag对象,静态检查阶段无法确定运行时的实际返回类型,因此判定row存在为字符串的可能性。 - 你当前作用域内存在同名的
row变量被赋值为字符串,哪怕该赋值分支运行时不会触发,或者同名变量定义在代码更靠后的位置,也会干扰PyCharm的类型推断逻辑。 - 你安装的第三方BeautifulSoup类型包(如
types-beautifulsoup4)版本过旧,类型桩定义存在错误,导致PyCharm识别类型出错。
解决方案
- 给
row变量添加显式类型标注,强制指定类型:row: bs4.element.Tag = 原有给row赋值的代码 - 确认类型无误的前提下,可在报错行添加类型忽略注释消除提示:
print(get_price(row)) # type: ignore - 升级BeautifulSoup对应的类型依赖到最新版本:
pip install --upgrade types-beautifulsoup4
内容的提问来源于stack exchange,提问作者Moritz Wolff
相关产品推荐
相关产品推荐

