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

使用aiohttp发送文件时报int类型无法序列化错误如何解决

报错原因

aiohttp 的 FormData.add_field() 方法不会自动转换非字符串类型的表单值,而你传入的 payload 中存在 int 类型的数值(比如 include_intonation: 1),aiohttp 无法直接序列化 int 类型作为表单字段值,因此抛出了该异常。requests 库在处理表单数据时会自动完成类型转换,所以之前的代码可以正常运行。

解决方案

在向 FormData 中添加字段时,手动将所有非字符串类型的值转为字符串即可,修改后的参考代码如下:

payload = {'text': input_text,
           'question_info': '',
           'include_intonation': 1,
           'stress_version': stress_version,
           'include_fluency': 1,
           'include_ielts_subscore': 1}

form = aiohttp.FormData()
for key, value in payload.items():
    # 统一将值转为字符串后再添加
    form.add_field(key, str(value))
# 文件对象不需要转字符串,aiohttp可直接处理
form.add_field('user_audio_file', open(saved_file_path, 'rb'))
async with aiohttp.ClientSession() as session:
    async with session.post(url, data=form) as response:
        response_json = await response.json()

可选优化建议

  • 你代码中定义的files变量未被使用,可以直接删除
  • 建议通过上下文管理器打开文件,避免文件句柄泄漏,示例如下:
form = aiohttp.FormData()
for key, value in payload.items():
    form.add_field(key, str(value))

async with aiohttp.ClientSession() as session:
    with open(saved_file_path, 'rb') as audio_f:
        form.add_field('user_audio_file', audio_f)
        async with session.post(url, data=form) as response:
            response_json = await response.json()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:01