我在FastAPI项目中负责处理从Mypy 0.770到0.870的更新,这产生了一个错误,我无法完全解决。我的端点可以根据某种条件返回两个不同的模型,这表示为endpont装饰器:
@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
但是not
现在,查看get
方法,我发现response_model
参数键入为Type[Any]
,我认为它必须是一个指针。
如何为我的API定义非简单的返回模型,并使Mypy开心?
编辑:我试图在一个较小的框架中重现该问题,但是不能。以下代码可以正常工作:
from typing import Any, Type, Union
def test1(var, response_model: Type[Any]):
print(f"Accepted Type[Any], {var}")
def test2(var, response_model: Union[dict, set]):
print(f"Accepted Union, {var}")
def main():
test1('test1', response_model=Union[dict, set])
test2('test2', response_model=Union[dict, set])
if __name__ == '__main__':
main()
我在FastAPI项目中负责处理从Mypy 0.770到0.870的更新,这产生了一个错误,我无法完全解决。我的端点可以返回两个不同的...
某物的Type[]
表示这种类型的未实例化的类,而Model1
在这里表示Model1
类的实例或任何从Model1
继承的实例。