我写了代码,但是我在pycharm(2019.1)中得到了下面的消息:“参数化泛型无法与类别或执行严修检查一起使用”
def data_is_valid(data):
keys_and_types = {
'comment': (str, type(None)),
'from_budget': (bool, type(None)),
'to_member': (int, type(None)),
'survey_request': (int, type(None)),
}
def type_is_valid(test_key, test_value):
return isinstance(test_value, keys_and_types[test_key])
type_is_valid('comment', 3)
我真的不太理解这个消息。我做错了什么还是pycharm有bug?如果我显式地将类型转换为tuple,错误就会消失。
def type_is_valid(test_key, test_value):
return isinstance(test_value, tuple(keys_and_types[test_key]))
4条答案
按热度按时间62lalag41#
这看起来像是pycharm中的一个bug,它过于急切地假设你正在以一种非预期的方式使用
typing
模块。请看下面这个例子,这个假设是正确的:typing
模块中的类只在类型注解上下文中有用,而不是检查或比较实际的类,这正是isinstance
试图做的。由于pycharm看到了一个带有方括号的简单对象,而该对象不包含文字,因此它跳转到了您看到的错误结论。您的代码很好,可以完全按原样使用。
8hhllhi22#
这是PyCharm 2018中的一个已知漏洞,已报告here。
在最近的PyCharm版本中仍然有一些相关的bug,例如PyCharm 2021.2.2,here。
一般来说,当您发现某些PyCharm警告不正确时,我会首先隔离一个简单的测试用例,在那里可以更清楚地了解PyCharm实际上不正确的地方。(或者可能先搜索现有的bug报告)。在这里这很清楚,因为PyCharm说你不能做某事,而事实上你可以,所以某事是错误的。
30byixjq3#
我不会在别人之后重复这是一个pycharm bug,只是如果你是一个完美主义者,错误伤害了你的眼睛,添加评论
# noqa
到“错误”所在的行
68de4m5k4#
既然大家都同意这是一个bug,你可以在Pycharm中通过以下语句来抑制它: