使用日期变量调用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
相关产品推荐
相关产品推荐

