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

For循环嵌套While循环后无法继续迭代的技术问题咨询

问题诊断与修复方案

嘿,这个问题其实很常见——你踩了变量作用域和初始化时机的坑!

问题根源

你在for循环外部定义了date = 1649196000000,当第一个symbol(ETH/USDT)的while循环跑完时,date已经被更新到大于now的数值了。等for循环迭代到下一个symbol(比如BTC/USDT)时,date <= now的条件直接不成立,while循环根本不会执行,所以后续的symbol完全没机会拉取数据。

修复后的代码

只需要把date的初始化移到for循环内部,让每个symbol都从初始日期开始拉取数据:

import ccxt
from datetime import datetime
import pandas as pd
import numpy as np

exchange = ccxt.binance({
    'enableRateLimit': True
})
now = int(round(datetime.timestamp(datetime.now())*1000))
data = []
symbols = ['ETH/USDT', 'BTC/USDT', 'LTC/USDT']

# 把date的初始化移到for循环内部,每个symbol都重置初始日期
for symbol in symbols:
    date = 1649196000000
    while date <= now:
        ohlcv = exchange.fetch_ohlcv(symbol, '1d', date, 20)
        data.append(ohlcv[0])
        print(symbol)
        print(data)
        # 更新date变量
        date = data[-1][0]
        date += 86400000

额外优化建议

  • 可以把print(data)改成只打印当前新增的条目,避免数据增多后输出过于臃肿:print(f"新增数据: {ohlcv[0]}")
  • 最后将data转为DataFrame时,指定列名并转换时间戳会更直观:
    df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
    df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')
    print(df)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:07:49