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

运行CmcScraper遇列表索引越界,如何让循环跳过无效代币?

问题:批量获取加密货币数据时,部分代币导致循环中断,捕获指定异常无效怎么办?

使用CmcScraper批量获取加密货币数据时,部分代币无可用数据会导致循环中断。尝试捕获InvalidCoinCode异常仍无法解决,请问如何让循环在代币数据不可用时继续执行?

原始代码:

import pandas as pd
from cryptocmd import CmcScraper

coins_list = []

coins = ['VIU', 'UTS', 'UVU', 'TRM']

for i in coins:
  scraper = CmcScraper(i, start_date="01-01-2017", end_date="01-04-2023")
  data = scraper.get_data()
  coins_list.append(data)

尝试过的异常捕获代码(无效):

from cryptocmd.utils import InvalidCoinCode
from cryptocmd import CmcScraper

coins = ['VIU', 'UTS', 'UVU', 'HNC', 'TRM']

for i in coins:
  try:
    scraper = CmcScraper(i, start_date="01-01-2017", end_date="01-04-2023")
    data = scraper.get_data()
    print(f"{i} is available through the CoinMarketCap API.")
  except InvalidCoinCode:
    print(f"{i} is not available through the CoinMarketCap API.")

解决方案

1. 先排查实际抛出的异常类型

你捕获的InvalidCoinCode可能不是实际触发的异常——比如代币存在但无历史数据、网络错误、API返回格式异常等情况,都会抛出其他类型的异常。先修改代码捕获所有异常并打印类型,定位问题:

from cryptocmd import CmcScraper
from cryptocmd.utils import InvalidCoinCode

coins = ['VIU', 'UTS', 'UVU', 'HNC', 'TRM']

for coin in coins:
    try:
        scraper = CmcScraper(coin, start_date="01-01-2017", end_date="01-04-2023")
        data = scraper.get_data()
        print(f"{coin} 数据获取成功")
    except InvalidCoinCode:
        print(f"{coin} 无效代币代码,跳过")
    except Exception as e:
        # 打印异常类型和详情,方便定位
        print(f"{coin} 获取失败:异常类型[{type(e).__name__}],详情:{str(e)}")

运行后就能看到具体是哪种异常导致循环中断,再针对性添加捕获逻辑。

2. 通用解决方案:捕获所有异常确保循环不中断

如果不需要区分异常类型,只希望循环继续执行,可以直接捕获所有Exception(调试或批量处理场景适用):

from cryptocmd import CmcScraper
from cryptocmd.utils import InvalidCoinCode

coins_list = []
coins = ['VIU', 'UTS', 'UVU', 'HNC', 'TRM']

for coin in coins:
    try:
        scraper = CmcScraper(coin, start_date="01-01-2017", end_date="01-04-2023")
        data = scraper.get_data()
        print(f"{coin} 数据获取成功")
        coins_list.append(data)
    except Exception as e:
        print(f"{coin} 无法获取数据:{str(e)}")
        # 可选:添加空值到列表,保持与coins的顺序一致
        # coins_list.append(None)

3. 额外检查:确认异常类的导入路径

部分版本的cryptocmd中,InvalidCoinCode的位置可能有变化,比如直接在cryptocmd模块下而非utils。可以查看库的源码确认,若导入错误会导致捕获失效,修改导入语句即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:44:58