为什么pyright严格模式不将没有“items()”的“for k, v in dict”标记为错误?

问题描述 投票:0回答:2

我在

test.py
中有以下代码:

my_dict = {"a": 1, "b": 3}
for k, v in my_dict:
   print(k)
   print(v)

当我运行

pyright pytest.py
时,这不会被标记为错误,即使根据我的理解,有足够的信息知道
my_dict.__iter__
返回
Iterable[keys]
并且类型检查器必须能够推断元组解包将失败。

python python-typing pyright
2个回答
1
投票

Pyright 假设字典键是字符串,并且是可迭代的。

元组解包是对可迭代对象的有效操作。

如果将其中一个键更改为整数(不可迭代),您将得到预期的错误。


0
投票

你可以有一本这样的字典 -

my_dict = {(1,2): 1, (2,1): 3}
for k,v in my_dict:
   print(k)
   print(v)

代码执行时不会出现任何问题,因为您可以在某些情况下解压密钥,并且 Pyright 不会对可以解压和不能解压的内容做出假设

© www.soinside.com 2019 - 2024. All rights reserved.