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

使用aiohttp异步发起多请求遇AttributeError,求问题排查

问题分析与修复

你的代码存在多处错误,直接引发了AttributeError,以下是具体解析和修正方案:

错误点拆解

  • 参数顺序颠倒:get_data函数定义的参数是session, x,但调用时写成了get_data(data, session),导致函数内的x实际是ClientSession对象,session变成了字符串参数,后续调用session.get必然出错。
  • 重复解析JSON:await response.json()已经将响应内容解析为Python字典/列表,你又调用data.json(),而字典不存在json()方法,这是触发AttributeError的直接原因。
  • 未定义变量:异常打印语句里的ticker变量未声明,应该替换为当前循环的x。
  • 变量拼写错误:resukts是笔误,正确名称应为results。

修正后的代码

import aiohttp
import asyncio

async def get_data(session, x):
    try:
        async with session.get(url=f'https://api.abc.com/{x}') as response:
            # response.json()已完成解析,直接返回结果
            data = await response.json()
            return data
    except Exception as e:
        print(f"Unable to get data for {x} due to {e.__class__}.")
        # 返回None避免单个请求失败导致gather整体报错(可选)
        return None

async def main(datas):
    async with aiohttp.ClientSession() as session:
        # 修正参数传递顺序
        ret = await asyncio.gather(*[get_data(session, data) for data in datas])
        return ret

datas = ['x1', 'x2', 'x3', 'x4'] 
results = asyncio.run(main(datas))
print(results)

关键修正说明

  1. 参数顺序修正后,ClientSession对象能正确传递给get_data,保证session.get调用正常。
  2. 移除重复的data.json()调用,直接返回response.json()解析后的结果。
  3. 异常信息里使用x替代未定义的ticker,便于定位出错的请求项。
  4. 修正变量拼写错误,确保结果能被正确接收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:05:23