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

Python yfinance导出股票数据至CSV函数运行打印bad排查

股票数据下载函数异常排查方案

故障背景

  • 实现目标:编写Python函数拉取过去12个月的股票行情数据,导出为本地CSV文件
  • 故障表现:测试调用download_stock('AAPL')时,代码始终进入异常分支打印bad,无法定位具体错误
    原实现代码:
import pandas as py
import numpy as np
import yfinance as yf
import datetime as dt
from pandas_datareader import data as pdr
from yahoofinancials import YahooFinancials

yf.pdr_override()


now_time=dt.datetime.now()
start_time = dt.datetime(now_time.year - 1, now_time.month , now_time.day)

bad_names=[]

def download_stock(stock):
    try:
        print(stock)
        stock_df = pdr.get_yahoo_data(stock, start_time, now_time)
        stock_df['Name'] = stock
        output_name = stock + '_data.csv'
        stock_df.to_csv("./stocks/"+output_name)
    except:
        bad_names.append(stock)
        print('bad: %s' % (stock))

download_stock('AAPL')

核心问题点

  • 裸异常捕获完全吞掉了错误栈:不带异常类型、不打印错误详情的except:写法会屏蔽所有报错信息,是无法定位问题的核心原因
  • 调用方法名拼写错误:yf.pdr_override()生效后,pdr模块拉取雅虎数据的方法是get_data_yahoo(),原代码写的get_yahoo_data()方法不存在,会直接触发AttributeError
  • 导出路径未做存在性校验:代码指定导出到./stocks/目录,如果运行前未手动创建该文件夹,to_csv()会触发FileNotFoundError
  • 存在冗余导入:pandas(别名py)、numpy、YahooFinancials三个导入项全程未被使用,不影响运行但属于无效代码

修正后可运行代码

import os
import datetime as dt
import yfinance as yf
from pandas_datareader import data as pdr

yf.pdr_override()

now_time = dt.datetime.now()
start_time = dt.datetime(now_time.year - 1, now_time.month, now_time.day)
bad_names = []

# 提前创建导出目录,不存在则自动生成
if not os.path.exists("./stocks"):
    os.makedirs("./stocks")

def download_stock(stock):
    try:
        print(stock)
        # 修正方法名拼写
        stock_df = pdr.get_data_yahoo(stock, start=start_time, end=now_time)
        stock_df['Name'] = stock
        output_name = f"{stock}_data.csv"
        stock_df.to_csv(f"./stocks/{output_name}")
        print(f"{stock} 数据下载完成,已保存到stocks目录")
    except Exception as e:
        # 打印具体错误信息方便排查
        bad_names.append(stock)
        print(f"下载{stock}失败,错误原因:{repr(e)}")

download_stock('AAPL')

排查通用建议

  • 调试阶段禁止使用裸except:,必须捕获具体异常类型并打印完整错误栈,否则完全无法定位问题
  • 涉及文件读写操作时,必须提前校验目标路径是否存在,不要依赖手动提前创建文件夹
  • 调用第三方库方法前确认方法名拼写,注意yfinance覆盖pdr接口后的方法名变更

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:15:48