在我们的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高兴?
某物的type[]
表示此类型的未实例化类,而model1
此处将表示model1
类的实例或从model1
继承的任何事物的实例。
尽管如此,错误消息还是令人费解的。
您使用的Python-V
是什么? 在python世界中,键入是一个新事物,而且在不同的python版本之间也可能会发生变化。 如果您遇到了Mypy
版本的问题,那么升级Python
可能会更好,因为它们可以一起使用。
另外,您使用的FastAPI
版本是什么? 我还会尝试将其更新到最新的0.55.1
。 Tiangolo自己写到他们在打字时有一个错误
来源