您的位置:

解决方案:fastapi fastapi.exceptions.FastAPIError(f"Invalid args for response field! Hint: check that {type_} is a valid pydantic field type") from None

  发布时间:2023-01-31 14:30:02
在FastAPI中,响应字段必须是有效的Pydantic字段类型,例如int、str、bool等。解决方法是检查响应字段的类型是否是有效的Pydantic字段类型,并修正为正确的类型。所以运行这个程序会导致的错误。我们可以把这个例子中的response_model 改成Pydantic Model类型,如下或者更换 response_model 另外,如果你想返回原始的json格式数据,可以使用FastAPI提供的这样就可以避免抛出的错误了。

报错的原因

这个错误是由于在FastAPI中定义了一个错误的响应字段导致的。在FastAPI中,响应字段必须是有效的Pydantic字段类型,例如int、str、bool等。如果使用了非法类型,则会引发此错误。

解决方法是检查响应字段的类型是否是有效的Pydantic字段类型,并修正为正确的类型。

例如,如果您定义了一个响应字段为字典,而不是Pydantic字段类型,则应该更改为正确的Pydantic类型,如下


from pydantic import BaseModel
class Item(BaseModel):
    name: str
    description: str

@app.post("/items/", response_model=Item)
async def create_item(item: Item):
    return item

这样就可以避免抛出 "Invalid args for response field" 的错误了。

如何解决

解决方法是检查响应字段的类型是否是有效的Pydantic字段类型,并修正为正确的类型。例如,如果您定义了一个响应字段为字典,而不是Pydantic字段类型,则应该更改为正确的Pydantic类型,如下:


from pydantic import BaseModel
class Item(BaseModel):
    name: str
    description: str

@app.post("/items/", response_model=Item)
async def create_item(item: Item):
    return item

或者更换 response_model 为响应类型

另外,如果你想返回原始的json格式数据,可以使用FastAPI提供的 JSONResponse


from fastapi.responses import JSONResponse

@app.post("/items/", response_class=JSONResponse)
async def create_item(item: dict):
    return item

这样就可以避免抛出 "Invalid args for response field" 的错误了。

使用例子

当然,下面是一个定义响应字段为非Pydantic字段类型的例子,它将导致 "Invalid args for response field" 的错误。


@app.post("/items/", response_model=dict)
async def create_item(item: dict):
    return item

这里,我们使用了 dict 作为响应字段,它是一个 python 内置字典类型,而不是 Pydantic Model类型。所以运行这个程序会导致 "Invalid args for response field" 的错误。

我们可以把这个例子中的response_model 改成Pydantic Model类型,如下:


from pydantic import BaseModel
class Item(BaseModel):
    name: str
    description: str

@app.post("/items/", response_model=Item)
async def create_item(item: dict):
    return item

或者更换 response_model 另外,如果你想返回原始的json格式数据,可以使用FastAPI提供的 JSONResponse


from fastapi.responses import JSONResponse

@app.post("/items/", response_class=JSONResponse)
async def create_item(item: dict):
    return item

这样就可以避免抛出 "Invalid args for response field" 的错误了。

上面的例子中,我们替换了response_model 为 JSONResponse,这样就不会抛出"Invalid args for response field" 的错误了。