You need to enable JavaScript to run this app. 使用yfinance下载数据时出现JSONDecodeError异常的排查咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用yfinance下载数据时出现JSONDecodeError异常的排查咨询

报错本质

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 出现的核心原因是yfinance从雅虎财经服务端拿到的响应不是合法JSON内容——可能是空响应、限流返回的HTML提示页、接口鉴权失效返回的空字符串,直接调用.json()解析就会触发报错。
yfinance底层用多线程做异步下载,线程内部抛出的异常不会向上传递到主程序,这也是为什么你的主程序不会被异常中断,但实际拿不到有效数据的原因。

排查修复步骤
  • 优先升级yfinance版本
    雅虎财经的公开接口会不定期调整鉴权规则、请求路径,旧版本yfinance因为没有同步适配改动,就会突发这类全量下载失效的问题。直接执行命令pip install --upgrade yfinance拉取最新稳定版,能解决90%以上同类无预兆突发报错。
  • 检查网络与IP限流状态
    如果升级后报错依旧存在,就需要排查当前网络出口IP是否被雅虎接口临时限流。可以手动在浏览器访问对应行情接口的返回内容,比如复制https://query1.finance.yahoo.com/v8/finance/chart/BTC-USD?interval=1wk&range=3000d这个地址到浏览器查看,如果返回的是空白内容、安全验证页、登录跳转页,就说明IP被临时拦截,一般等待12-24小时会自动解封,也可以直接切换其他网络环境快速验证。
  • 禁用多线程并发降低拦截概率
    多线程并发请求是触发服务端限流的常见原因,在yf.download调用时增加threads=False参数,改成单线程顺序下载,能大幅降低被服务端拦截的概率,修改后的代码参考:
    for ticker in tickers:
        df[ticker] = yf.download(
            ticker,
            start,
            end,
            interval="1wk",
            threads=False
        )['Adj Close'].dropna()
    
  • 补全容错逻辑
    因为yfinance会静默吞掉线程内的异常,建议在循环下载逻辑里增加数据空值判断,当单只标的下载结果为空时自动重试2-3次,应对服务端偶发的接口波动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 04:27:00