在 PyCharm 中类型提示 dict.items() 时出现奇怪的行为

Ale*_*ood 2 python type-hinting pycharm python-3.x python-typing

假设我有一个函数do_something

from typing import Sequence, Tuple, Dict

def do_something(argument: Sequence[Tuple[int, str]]):
    pass
Run Code Online (Sandbox Code Playgroud)

假设我还有一个字典 ,D其键仅是ints,其值仅是strs:

D: Dict[int, str] = {1: 'a', 2: 'b', 3: 'c'}
Run Code Online (Sandbox Code Playgroud)

在 PyCharm 中,这将出色地通过类型检查器:

do_something(
    ((1, 'a'), (2, 'b'), (3, 'c'))
)
Run Code Online (Sandbox Code Playgroud)

但是,根据 PyCharm 的说法,尽管它产生的结果是相同的,但类型检查器却失败了:

do_something(tuple(D.items()))
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗——我在这里遗漏了什么吗?-- 或者这是 PyCharm 类型检查器的错误?

Alb*_*ert 6

这是 PyCharm 中的一个错误。类似的bug还有很多,比如这个这个这个

总的来说,PyCharm 在这方面非常聪明。D它正确地推断出您的情况的类型。它还可以正确推断D.items(), 然后在 , 等代码中for k, v in D.items()kv被正确推断。但由于某种奇怪的原因,tuple//或周围的东西list有问题。sortedD.items()

当您期望 Youtrack 能够正常工作时,我总是会在Youtrack上报告问题。