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

异步CCXT应用报错TypeError: dict_keys无法用于await表达式求解决

解决CCXT异步代码中dict_keys can't be used in 'await' expression错误

问题背景

基于CCXT异步示例开发应用时,运行代码触发以下错误:

TypeError object dict_keys can't be used in 'await' expression

原核心代码片段(init.py):

import ccxt.async_support as ccxt

class Init:
    async def loadSymbols(self):
        symbols_list = {}
        for exchange_id in ['poloniex', 'binance']:
            exchange_class = getattr(ccxt, exchange_id)
            exchange = exchange_class()
            try:
                await exchange.load_markets()
                # 错误根源:给普通dict_keys对象加了await
                symbols_list[exchange_id] = await exchange.markets.keys()
            except Exception as e:
                print(type(e).__name__, str(e))
            await exchange.close()
        return symbols_list

错误原因

await关键字仅能用于协程、Future或其他可await对象,而exchange.markets是调用await exchange.load_markets()后得到的普通Python字典,exchange.markets.keys()返回的是dict_keys类型的可迭代对象,完全不需要用await修饰。

正确修改方案

直接去掉多余的await,如果需要将符号集合转为普通列表(方便后续操作),可以用list()包裹:

修改后的init.py代码:

import ccxt.async_support as ccxt

class Init:
    async def loadSymbols(self):
        symbols_list = {}
        for exchange_id in ['poloniex', 'binance']:
            exchange_class = getattr(ccxt, exchange_id)
            exchange = exchange_class()
            try:
                await exchange.load_markets()
                # 去掉await,可选转为列表
                symbols_list[exchange_id] = list(exchange.markets.keys())
            except Exception as e:
                print(type(e).__name__, str(e))
            await exchange.close()
        return symbols_list

为什么之前的尝试无效

  1. 尝试一:使用asyncio.gather(*input_coroutines)是错误的,因为exchange.markets.keys()返回的不是协程集合,gather要求传入可await对象,因此触发An asyncio.Future, a coroutine or an awaitable is required错误。
  2. 尝试二:取list(exchange.markets.keys())[0]仅能获取单个符号,完全偏离了获取所有符号的需求,且错误配合asyncio.gather使用,逻辑不成立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:55:02