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

请求解决yfinance获取ISIN时的HTTPError 404问题

处理yfinance获取ISIN时的404错误:跳过无效Ticker并记录

我将股票代码(ticker)存储在列表中,需要获取对应的ISIN代码。使用yfinance的isin属性可获取ISIN,但部分ticker在yfinance中不存在,触发HTTPError 404错误。需修改代码跳过无效ticker并记录它们。


原代码

tickers = list_companies
tickers = [yf.Ticker(ticker) for ticker in tickers]
dfs = []

for ticker in tickers:
    isin = ticker.isin

报错信息

---------------------------------------------------------------------------
HTTPError                                 Traceback (most recent call last)
<ipython-input-40-66c3d6fb28b7> in <module>
      2 
      3 for ticker in tickers:
----> 4     isin = ticker.isin

~/opt/anaconda3/lib/python3.8/site-packages/yfinance/ticker.py in isin(self)
    100     @property
    101     def isin(self):
--> 102         return self.get_isin()
    103 
    104     @property

~/opt/anaconda3/lib/python3.8/site-packages/yfinance/base.py in get_isin(self, proxy)
   1404 
   1405         self._quote.proxy = proxy
--> 1406         if self._quote.info is None:
   1407             # Don't print error message cause self._quote.info will print one
   1408             return None

~/opt/anaconda3/lib/python3.8/site-packages/yfinance/scrapers/quote.py in info(self)
    570         if self._info is None:
    571             # self._scrape(self.proxy)  # decrypt broken
--> 572             self._fetch(self.proxy)
    573 
    574             self._fetch_complementary(self.proxy)

~/opt/anaconda3/lib/python3.8/site-packages/yfinance/scrapers/quote.py in _fetch(self, proxy)
    721         modules = ['summaryProfile', 'financialData', 'quoteType',
    722                      'defaultKeyStatistics', 'assetProfile', 'summaryDetail']
--> 723         result = self._data.get_raw_json(
    724             _BASIC_URL_ + f"/{self._data.ticker}", params={"modules": ",".join(modules), "ssl": "true"}, proxy=proxy
    725         )

~/opt/anaconda3/lib/python3.8/site-packages/yfinance/data.py in get_raw_json(self, url, user_agent_headers, params, proxy, timeout)
    212     def get_raw_json(self, url, user_agent_headers=None, params=None, proxy=None, timeout=30):
    213         response = self.get(url, user_agent_headers=user_agent_headers, params=params, proxy=proxy, timeout=timeout)
--> 214         response.raise_for_status()
    215         return response.json()
    216 

~/opt/anaconda3/lib/python3.8/site-packages/requests/models.py in raise_for_status(self)
   1019 
   1020         if http_error_msg:
--> 1021             raise HTTPError(http_error_msg, response=self)
   1022 
   1023     def close(self):

HTTPError: 404 Client Error: Not Found for url: https://query2.finance.yahoo.com/v10/finance/quoteSummary/AGN?modules=summaryProfile%2CfinancialData%2CquoteType%2CdefaultKeyStatistics%2CassetProfile%2CsummaryDetail&ssl=true

尝试的新代码

import requests
df = []
company_na = []
for ticker in tickers:
    try: 
        isin = ticker.isin
        data = isin
        #data['Ticker'] = ticker.ticker
        df.append(data)
    except requests.exceptions.HTTPError:
        print('error ticker not found:')
        company_na.append(ticker)
        continue

df = pd.DataFrame(df, columns = ['ISIN'])
dfs['Ticker'] = ticker.ticker
print(dfs)

修正后的正确代码

import yfinance as yf
import pandas as pd
import requests

# 假设list_companies是你的股票代码列表
tickers_list = list_companies
valid_isin_data = []
invalid_tickers = []

for ticker_symbol in tickers_list:
    try:
        # 将Ticker实例化放入try块,避免提前触发404
        ticker = yf.Ticker(ticker_symbol)
        isin = ticker.isin
        if isin:  # 过滤无ISIN数据的有效Ticker
            valid_isin_data.append({
                'Ticker': ticker_symbol,
                'ISIN': isin
            })
        else:
            invalid_tickers.append(ticker_symbol)
            print(f"无ISIN数据: {ticker_symbol}")
    except requests.exceptions.HTTPError:
        invalid_tickers.append(ticker_symbol)
        print(f"无效Ticker(404): {ticker_symbol}")
    except Exception as e:
        # 捕获其他未知异常
        invalid_tickers.append(ticker_symbol)
        print(f"处理{ticker_symbol}时出错: {str(e)}")

# 转换为结构化DataFrame
isin_df = pd.DataFrame(valid_isin_data)
print("有效ISIN数据:")
print(isin_df)
print("\n无效/无数据的Ticker列表:")
print(invalid_tickers)

关键修正说明

  • 提前捕获异常:原代码提前实例化所有Ticker对象,此时已触发404错误,后续try-except无法捕获。修正后将ticker = yf.Ticker(ticker_symbol)放入try块,在实例化阶段就捕获错误。
  • 保持数据关联:用字典存储Ticker符号与对应ISIN,避免原尝试代码中数据对应关系丢失的问题。
  • 全面异常处理:除HTTPError外,增加通用异常捕获,覆盖网络超时、数据解析错误等其他可能问题。
  • 过滤空值:部分有效Ticker可能无ISIN数据,新增判断逻辑并记录这类情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:57:32