mypy 错误:返回值类型不兼容(得到“object”,预期“Dict [Any, Any]”)

Posted

技术标签:

【中文标题】mypy 错误:返回值类型不兼容(得到“object”,预期“Dict [Any, Any]”)【英文标题】:mypy error: Incompatible return value type (got "object", expected "Dict[Any, Any]") 【发布时间】:2021-12-31 21:58:21 【问题描述】:

我有一个如下所示的 python 类:

class TestClass():

    def __init__(self, input_data):
        self.input_data = input_data #always 'a' or 'b'

    def test(self) -> dict[int, Any]:
        a = 'a': 1:0, 2:0, 'b': 2:0, 3:'string'
        return a[self.input_data]

运行 mypy 会导致错误消息 Incompatible return value type (got "object", expected "Dict[Any, Any]")。有没有办法解决这个问题?

一行 if 语句也有同样的问题,例如如果我根据条件返回不同的整数并将返回类型注释为 int,则会引发错误消息,指出返回“对象”类型。

【问题讨论】:

如果input_data 必须始终为"a""b",则应添加该键入信息。而dict[str, Any] 不是test 的正确返回类型,因为a[self.input_data] 始终是一个字典,其键是int,而不是str 【参考方案1】:

需要给a添加类型注解:

a: dict[str, Any] = 'a': 1:0, 2:0, 'b': 2:0, 3:'string'

这个函数似乎返回了dict[int, Any],而不是dict[str, Any],但我不确定你的意图。

编辑:从您的编辑看来,您确实想要dict[int, Any]。在这种情况下,您可以将a 的类型缩小为dict[str, dict[int, Any]]

【讨论】:

以上是关于mypy 错误:返回值类型不兼容(得到“object”,预期“Dict [Any, Any]”)的主要内容,如果未能解决你的问题,请参考以下文章

Mypy 错误 - 分配中的类型不兼容

mypy 错误 - 尽管使用了“Union”,但类型不兼容

使用 mypy 检查类型时有啥问题

mypy:如何最好地处理 random.choice

检查 stdlib 函数时出现 Mypy 错误?

java - 错误不兼容类型:意外返回值 - 遍历列表