我在
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]
并且类型检查器必须能够推断元组解包将失败。
Pyright 假设字典键是字符串,并且是可迭代的。
元组解包是对可迭代对象的有效操作。
如果将其中一个键更改为整数(不可迭代),您将得到预期的错误。
你可以有一本这样的字典 -
my_dict = {(1,2): 1, (2,1): 3}
for k,v in my_dict:
print(k)
print(v)
代码执行时不会出现任何问题,因为您可以在某些情况下解压密钥,并且 Pyright 不会对可以解压和不能解压的内容做出假设