如何在 Python 3.11.9 中捕获 yfinance 的“invalid crumb”异常?

问题描述 投票:0回答:1

我有一个 Excel 股票代码列表,我正在通过 yfinance 运行它来获取基本分析数据。我收到 2 个错误:

  • “keyError”异常,因为某些数据(例如“forwardPE”)对于给定交易品种不可用
  • “404 客户端错误:未找到 url:”打开 URL 时出现“无效碎屑”

我尝试在第一个循环中捕获 404,在第二个循环中捕获 keyError...404 捕获不起作用。

** 我的代码:**

import requests
import time
import yfinance as yf
import pandas as pd

the_list_include = []

################################################### OPEN THE EXCEL FILE AND COLLECT THE SYMBOLS
df = pd.read_excel('company_list_404.xlsx')
symbols = df['Symbol'].values.tolist()

for count, symbol in enumerate(symbols):
    try:
        stock = yf.Ticker(symbol)
        the_list_include.append(symbol)
    except requests.exceptions.HTTPError:
        continue

for i in the_list_include:
    try:
        stock = yf.Ticker(i)
        PE = stock.info['forwardPE']
    except KeyError:
        print("\n")
        continue

我尝试在第二个循环的一行中使用多个异常:

for i in the_list_include:
    try:
        stock = yf.Ticker(i)
        PE = stock.info['forwardPE']
    except (requests.exceptions.HTTPError, KeyError) as e:
        print("\n")
        continue
python python-3.x yfinance
1个回答
0
投票

我认为

Ticker
可能很懒,当你运行时它不会连接到服务器
Ticker()

但是当你运行
.info[]
或其他函数时。

即使我把

stock = yf.Ticker(symbol)
放在
try/except
外面,只将
info[]
放在
try/except
里面,它也会抓住
HTTPError

symbols = ['ABC', 'AAL', 'IBM']

for count, symbol in enumerate(symbols):
    print('Symbol:', symbol)
    stock = yf.Ticker(symbol)
    try:
        PE = stock.info['forwardPE']
    except requests.exceptions.HTTPError as e:
        print('  HTTPError:', e)
    except KeyError as e:
        print('  KeyError:', e)

所以你可能必须始终使用

except requests.exceptions.HTTPError
来解决这个问题。或者将所有代码放入
try/except requests.exceptions.HTTPError

© www.soinside.com 2019 - 2024. All rights reserved.