您的位置:

关于fastapi的TypeError("vars() argument must have __dict__ attribute")

  发布时间:2023-02-03 05:30:02
报错的原因fastapi在处理请求时会调用vars()函数来获取请求中的参数。这通常是由于使用了不支持vars()函数的对象作为请求参数导致的。如何解决应该在调用vars()函数之前进行类型检查,确保传入的参数具有__dict__属性。另外,我们可以在请求参数中使用基本类型或其他支持vars()函数的类型,来避免该问题使用例子是的,可以这样做这段代码中,我们在读取请求参数q时,先检查它是否具有__dict__属性。

报错的原因

fastapi在处理请求时会调用vars()函数来获取请求中的参数。当该函数的参数不具有__dict__属性时,会抛出TypeError("vars() argument must have __dict__ attribute")的异常。这通常是由于使用了不支持vars()函数的对象作为请求参数导致的。

如何解决

应该在调用vars()函数之前进行类型检查,确保传入的参数具有__dict__属性。可以使用Python内置的hasattr()函数来判断一个对象是否具有某个属性。

另外,我们可以在请求参数中使用基本类型(例如字符串、整数、浮点数等)或其他支持vars()函数的类型,来避免该问题。


if hasattr(request_param, "__dict__"):
    # do something
else:
    raise ValueError("The request parameter does not support vars() function.")

使用例子

是的,可以这样做:


from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: dict):
    if hasattr(q, "__dict__"):
        return {"item_id": item_id, "q": q}
    else:
        raise HTTPException(status_code=400, detail="query param 'q' must be a dict.")

这段代码中,我们在读取请求参数q时,先检查它是否具有__dict__属性。如果q不是一个字典对象,我们就抛出一个HTTPException异常,并指定一个错误码和错误信息。