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]”)的主要内容,如果未能解决你的问题,请参考以下文章