【问题标题】:mypy error: Incompatible return value type (got "object", expected "Dict[Any, Any]")mypy 错误:返回值类型不兼容(得到“object”,预期“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

标签: python type-hinting mypy


【解决方案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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2021-06-14
    • 2020-08-29
    • 2020-11-05
    • 2021-05-08
    • 2021-07-16
    • 2020-08-05
    相关资源
    最近更新 更多