You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI接口报错:AttributeError: 'dict' object has no attribute 'encode'

问题解决:FastAPI返回Response时出现AttributeError错误

错误原因

  1. Response参数类型错误:你直接将字典data传入Response(),但Response类要求传入字符串或字节流数据。FastAPI会尝试对传入内容调用encode()方法编码成字节,而字典没有encode方法,因此触发AttributeError。
  2. 请求参数接收错误:spell_check(word: Dict)这种写法会让FastAPI将word当作URL查询参数处理,但你的请求是通过POST请求体传递JSON数据,这样无法正确获取请求中的word字段。

修正方案

方案1:直接返回字典(推荐)

FastAPI会自动将字典序列化为JSON响应,无需手动使用Response类,这是FastAPI的标准用法:

from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel

app = FastAPI()

# 用Pydantic模型定义请求体结构
class WordRequest(BaseModel):
    word: str

@app.post('/spell_checking')
def spell_check(request: WordRequest):
    # 这里可添加拼写检查逻辑,处理request.word
    data = {
        'corrected': 'testing'  # 示例修正结果
    }
    return data  # 直接返回字典,FastAPI自动转为JSON响应

@app.get('/')
def welcome():
    return 'Hello World'  # 直接返回字符串,FastAPI自动处理

if __name__ == '__main__':
    uvicorn.run(app, port=8080, host='0.0.0.0')

方案2:手动使用Response类(需自定义响应时用)

如果需要自定义响应头、状态码等细节,要先将字典转为JSON字符串,并指定media_type为application/json:

from fastapi import FastAPI, Response
import uvicorn
from pydantic import BaseModel
import json

app = FastAPI()

class WordRequest(BaseModel):
    word: str

@app.post('/spell_checking')
def spell_check(request: WordRequest):
    data = {
        'corrected': 'testing'
    }
    # 将字典转为JSON字符串后传入Response
    return Response(content=json.dumps(data), media_type='application/json')

@app.get('/')
def welcome():
    return Response(content='Hello World', media_type='text/plain')

if __name__ == '__main__':
    uvicorn.run(app, port=8080, host='0.0.0.0')

关键修正点说明

  • 使用Pydantic模型(如WordRequest)可自动解析和验证POST请求体的JSON数据,确保正确获取word字段。
  • 避免直接将字典传入Response,要么让FastAPI自动处理序列化,要么手动转为JSON字符串后再传入。

内容的提问来源于stack exchange,提问作者sin0x1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:15:30