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

Yahoo Finance YFTzMissingError无法被try-except捕获问题排查

问题解决:yfinance无效股票代码未被捕获导致程序继续执行

问题原因

核心问题在于yf.download()遇到无效Ticker时,默认不会主动抛出YFTzMissingError异常,仅在控制台打印错误信息,同时返回空DataFrame。你的try块未检测这个空结果,因此不会触发except分支,程序直接执行break跳出循环。另外,将函数定义放在try块内属于冗余操作,应移至循环外部。

修复方案

方案1:捕获具体异常+验证返回结果

先从yfinance导入对应异常类,同时在获取数据后检查结果是否为空,双重拦截无效Ticker:

import pandas as pd
import yfinance as yf
from yfinance.exceptions import YFTzMissingError

# 函数定义移至循环外,避免重复定义
def closing_price(ticker, start_date, end_date):
    # 关闭下载进度条,减少冗余输出
    data = yf.download(ticker, start=start_date, end=end_date, progress=False)
    if data.empty:
        raise ValueError("无效股票代码,无数据返回")
    return pd.DataFrame(data['Adj Close'])

startDate = "2023-01-01"
endDate = "2024-01-01"

while True:
    tickerInput = input("请输入要测试的股票代码(不要加引号):")
    ticker = tickerInput.upper()
    
    try:
        asset = closing_price(ticker, startDate, endDate)
        asset.head()
        print("股票代码有效,继续执行后续逻辑")
        break
    except (YFTzMissingError, ValueError) as e:
        print(f"无效股票代码!请重新输入。错误信息:{str(e)}")

方案2:提前验证Ticker合法性

先用yfinance的Ticker对象预验证,避免触发下载错误:

import pandas as pd
import yfinance as yf
from yfinance.exceptions import YFTzMissingError

def closing_price(ticker, start_date, end_date):
    data = yf.download(ticker, start=start_date, end=end_date, progress=False)
    return pd.DataFrame(data['Adj Close'])

startDate = "2023-01-01"
endDate = "2024-01-01"

while True:
    tickerInput = input("请输入要测试的股票代码(不要加引号):")
    ticker = tickerInput.upper()
    
    try:
        # 预验证Ticker有效性
        ticker_obj = yf.Ticker(ticker)
        if not ticker_obj.info:
            raise ValueError("无法获取股票代码基本信息")
        
        asset = closing_price(ticker, startDate, endDate)
        if asset.empty:
            raise ValueError("无历史数据返回")
            
        print("股票代码有效,继续执行后续逻辑")
        break
    except (YFTzMissingError, ValueError) as e:
        print(f"无效股票代码!请重新输入。错误信息:{str(e)}")

关键修改点

  • 将函数定义移至循环和try块外部,避免重复定义
  • 捕获YFTzMissingError具体异常,同时检查返回的DataFrame是否为空,主动抛出异常触发except分支
  • 添加progress=False关闭下载进度条,简化控制台输出
  • 捕获具体异常而非裸except,避免误拦截无关异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:06