为何Pyright严格模式未标记‘for k, v in dict’未加items()为错误?
问题分析与解决
这段代码在运行时必然报错:直接遍历字典只会返回键(字符串类型),for k, v in my_dict:的元组解包操作会因单个字符串无法拆分为两个变量抛出ValueError。
Pyright未检测出该错误的核心原因是默认检查规则未启用迭代项类型不匹配的检测:
- 从类型定义上,字典的
__iter__方法确实返回Iterable[KeyType],但Pyright默认不会主动校验迭代时的元组解包是否和迭代项类型匹配。 - 只需开启更严格的检查规则即可触发该错误提示。
解决步骤
- 在项目根目录创建
pyrightconfig.json文件,添加以下配置(开启全量严格检查):
{ "strict": true }
或者单独启用对应规则(仅检测迭代项类型不匹配):
{ "reportIterableItemTypeMismatch": true }
- 重新运行
pyright test.py,此时Pyright会准确提示:Expression of type "str" cannot be assigned to declared type "tuple[str, Unknown]"
正确写法
遍历字典键值对应该使用items()方法:
my_dict = {"a": 1, "b": 3} for k, v in my_dict.items(): print(k) print(v)
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

