如何解决PyCharm 中带有类型提示的奇怪行为
说我有一个函数,do_something:
from typing import *
def do_something(argument: Sequence[Tuple[int,str]]):
pass
假设我还有一个字典 D,它的键只有整数,而它的值只有字符串:
D = {1: 'a',2: 'b',3: 'c'}
在 PyCharm 中,这将通过类型检查器的出色表现:
do_something(
((1,'a'),(2,'b'),(3,'c'))
)
但是,根据 PyCharm 的说法,尽管它产生的结果相同,但类型检查器失败了:
do_something(tuple(D.items()))
这是预期的行为 - 我在这里遗漏了什么吗? -- 或者这是 PyCharm 的类型检查器的错误?
解决方法
这是 PyCharm 中的一个错误。 有许多类似的错误,例如this、this、this。
总的来说,PyCharm 在这方面非常聪明。它在您的情况下正确推断 D
的类型。它还正确推断出 D.items()
,然后在像 for k,v in D.items()
、k
和 v
这样的代码中将被正确推断。但是出于某种奇怪的原因,tuple
/list
/sorted
或 D.items()
周围的东西有问题。
我总是在 Youtrack 上报告问题,而您认为它应该可以正常工作。
,PyCharm 不能保证 D
的类型真的是 Dict[str,int]
;它可能不会进行代码流分析以确保没有任何东西不能将非 (str,int)
对添加到 dict 中。 (顺便说一句,您应该看看 Mypy,Python 的“规范”类型检查器是否可以。)
您可以添加显式类型注释以查看是否有帮助。
D: Dict[str,int] = {1: 'a',2: 'b',3: 'c'}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。