使用Python从雅虎财经获取股票财报日期遇无数据报错如何解决
问题根因
yahoo_fin库的get_next_earnings_date方法在目标股票没有公开的下一期财报日期时,底层接口返回的财报日期列表为空,方法内部直接取列表第一个元素就会触发IndexError,导致程序直接终止。
修复方案
在调用财报查询方法的位置增加异常捕获逻辑,遇到无有效数据的股票时做自定义标记,不会中断后续其他股票的查询,修改后的完整代码如下:
import yahoo_fin.stock_info as si import pandas as pd import xlwings as xw wb = xw.Book("StockScreener.xlsm") ws1 = wb.sheets["Tickers"] # 统计有股票代码的有效行数 rownum = 3 maxRow = 3 while (ws1.range('B'+str(rownum)).value != None): maxRow += 1 rownum += 1 for ticker_row in range(3, maxRow): ticker_symbol = ws1.cells(ticker_row, 2).value # 异常捕获处理无财报数据的情况 try: tickerEarnings = si.get_next_earnings_date(ticker_symbol) print(ticker_symbol, tickerEarnings) # 如果需要写回Excel可增加下行: # ws1.cells(ticker_row, 3).value = tickerEarnings except IndexError: # 自定义无数据时的输出标记,可根据需求调整 print(ticker_symbol, "N/A") # 如果需要写回Excel可增加下行: # ws1.cells(ticker_row, 3).value = "N/A"
扩展说明
如果需要进一步兼容其他可能的异常(比如股票代码无效、网络请求失败等),可以在except IndexError下方增加其他异常类型的捕获分支,或者直接捕获通用Exception做统一处理。
内容的提问来源于stack exchange,提问作者danjuma
相关产品推荐
相关产品推荐

