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

使用日期变量调用yfinance API触发YFRateLimitError,硬编码日期正常

yfinance使用日期变量触发YFRateLimitError但硬编码日期正常的解决办法

问题概述

使用yfinance 0.2.64和Python 3.13.5获取股票每日数据时,通过变量传递日期会触发限流错误:

YFRateLimitError('Too Many Requests. Rate limited. Try after a while.')

但硬编码完全相同的日期字符串却能正常运行。已验证日期变量的值和硬编码字符串完全一致,且尝试过用Python datetime对象和pandas Timestamp生成日期,均触发相同错误。

可能原因

虽然日期值表面一致,但可能存在以下隐形问题:

  • 生成日期变量的代码可能在调试或循环中被重复执行,导致短时间内发起多次API请求,触发限流。
  • yfinance对字符串日期和datetime/Timestamp对象的内部处理逻辑不同,可能导致变量传递时产生额外的请求行为。
  • 限流机制会综合判断请求频率、参数组合等,即使单次请求参数相同,短时间内重复请求也可能触发限制。

解决建议

  • 添加请求延迟:在调用yf.download前加入固定延迟,降低请求频率:

    import time
    time.sleep(2)  # 延迟2秒,可根据情况调整时长
    
    stock_data = yf.download(
        tickers=ticker,
        interval="1d",
        start=today_date,
        end=tomorrow_date,
        progress=False 
    )
    
  • 直接传递datetime/Timestamp对象:跳过字符串格式化,直接传递原生日期对象给yfinance,减少内部处理的潜在问题:

    import pandas as pd
    today = pd.Timestamp.today().normalize()
    tomorrow = today + pd.Timedelta(days=1)
    
    stock_data = yf.download(
        tickers=ticker,
        interval="1d",
        start=today,
        end=tomorrow,
        progress=False 
    )
    
  • 严格控制定时任务间隔:若用于定时任务,确保两次执行间隔至少在1分钟以上,避免连续请求触发限流。使用定时工具(如APScheduler、crontab)时设置合理的执行周期。

  • 排查重复请求:检查代码逻辑,确保生成日期和调用API的代码没有被重复执行(比如调试时多次运行、循环内重复调用)。

  • 升级yfinance版本:尝试升级到最新稳定版,可能修复参数处理相关的限流触发问题:

    pip install --upgrade yfinance
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:12:43