pycharm 参数化泛型不能与类或示例检查一起使用

xtupzzrd  于 2022-11-08  发布在  PyCharm
关注(0)|答案(4)|浏览(213)

我写了代码,但是我在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]))

62lalag4

62lalag41#

这看起来像是pycharm中的一个bug,它过于急切地假设你正在以一种非预期的方式使用typing模块。请看下面这个例子,这个假设是正确的:

typing模块中的类只在类型注解上下文中有用,而不是检查或比较实际的类,这正是isinstance试图做的。由于pycharm看到了一个带有方括号的简单对象,而该对象不包含文字,因此它跳转到了您看到的错误结论。
您的代码很好,可以完全按原样使用。

8hhllhi2

8hhllhi22#

这是PyCharm 2018中的一个已知漏洞,已报告here
在最近的PyCharm版本中仍然有一些相关的bug,例如PyCharm 2021.2.2,here
一般来说,当您发现某些PyCharm警告不正确时,我会首先隔离一个简单的测试用例,在那里可以更清楚地了解PyCharm实际上不正确的地方。(或者可能先搜索现有的bug报告)。在这里这很清楚,因为PyCharm说你不能做某事,而事实上你可以,所以某事是错误的。

30byixjq

30byixjq3#

我不会在别人之后重复这是一个pycharm bug,只是如果你是一个完美主义者,错误伤害了你的眼睛,添加评论
# noqa
到“错误”所在的行

68de4m5k

68de4m5k4#

既然大家都同意这是一个bug,你可以在Pycharm中通过以下语句来抑制它:


# noinspection PyTypeHints

相关问题