提问者:小点点

Mypy+FastAPI response_model


在我们的FastAPI项目中,我的任务是处理从Mypy 0.770到0.870的更新,这产生了一个我无法完全理解的错误。 我的endpoint可以基于某些条件返回两个不同的模型,这表示为endpont Decorator:

@router.get("/", response_model=Union[Model1, Model2])

Mypy 0.870现在对此提出了抱怨,并指出

Argument "response_model" to "get" of "APIRouter" has incompatible type "object"; expected "Optional[Type[Any]]"

将其设置为单个类型(如model1或甚至str)可删除错误。 但是any不起作用。

现在,查看get方法,我看到response_model参数被类型化为type[Any],我假定它必须是一个指针。

我如何为我的API定义非简单的返回模型,并使Mypy高兴?


共1个答案

匿名用户

某物的type[]表示此类型的未实例化类,而model1此处将表示model1类的实例或从model1继承的任何事物的实例。

尽管如此,错误消息还是令人费解的。

您使用的Python-V是什么? 在python世界中,键入是一个新事物,而且在不同的python版本之间也可能会发生变化。 如果您遇到了Mypy版本的问题,那么升级Python可能会更好,因为它们可以一起使用。

另外,您使用的FastAPI版本是什么? 我还会尝试将其更新到最新的0.55.1。 Tiangolo自己写到他们在打字时有一个错误

来源