使 yfinance 错误传播

Making yfinance errors propagate

我正在尝试构建一个应用程序,允许用户将股票添加到投资组合中,然后对该投资组合进行分析。必须仅添加现有库存,即那些数据可用的库存。如果用户输入了无效的股票代码,则需要进行处理。显而易见的选择是某种 try-except 结构。我试过这个,但无法弄清楚我的方法在哪里失败。注:我是用yfinance下载股票数据

def getData(self, period):
    try:
        stock = yf.Ticker(self.ticker)
        data = stock.history(period = period)
        return data
    except Exception as exception:
        print(exception)
        raise Exception

Inside a Stock class 我正在实现一个 getData() 函数。我使用 yfinance 创建了一个名为 stock 的代码对象,然后尝试下载历史市场数据。这在某些情况下效果很好(AAPL、TSLA、...、真实股票代码)。

在主应用程序中,我有一个标签,如果股票有效,该标签将被更新:

def extendPortfolio():
        try:
            stock = st.Stock(stock_entry.get().upper())
            data = stock.getData("1mo")
            self.portfolio.append(stock)
            portfolioString.set(portfolioString.get() + "\n" + stock.__str__())
        except Exception as exception:
            print(exception)

使用 Stock class 功能,创建一个股票对象,下载其数据,并尽最大努力将其添加到 tk.StringVar 投资组合字符串中。我的问题是:无论我决定在条目中输入什么废话,它都会被添加到投资组合字符串中,从而出现在标签中。

终端中显示一条消息:- {some nonsense sequence}: No data found, symbol may be delisted 此消息很可能来自 yfinance 库本身。但这是否意味着错误被处理得太早了?我怎样才能使这些错误在程序中进一步传播到需要处理它们的地方?

我希望问题很清楚,如果不清楚,请要求澄清。在此先感谢您的帮助!

如果 yfinance 无法下载数据,它不会引发异常——它提供一个空数据框。为确保只添加有效股票,请检查提供的数据框是否为空。

def getData(self, period):
    try:
        stock = yf.Ticker(self.ticker)
        data = stock.history(period = period)
        if data.empty:
            raise Exception
    except:
        print("data is empty")
        raise Exception
    else:
        return data

这解决了问题。我希望这对以后的人有所帮助。