如何使用 yfinance 检测失败的下载

How to detect failed downloads using yfinance

我正在使用 API yfinance:https://github.com/ranaroussi/yfinance

使用下面的简单代码:

data = yf.download("A AA AAA Z LOL KE QP")

我得到以下输出:

[*********************100%***********************]  7 of 7 completed

2 Failed downloads:
- LOL: 1d data not available for startTime=-2208988800 and endTime=1621954979. Only 100 years worth of day granularity data are allowed to be fetched per request.
- QP: 1d data not available for startTime=-2208988800 and endTime=1621954979. Only 100 years worth of day granularity data are allowed to be fetched per request.

我想知道如何在我的代码中检测到“LOL”和“QP”失败?

在对数据输出进行了更多尝试后,我发现了一种检查失败值的非优雅方法,例如元素“LOL”:

all(pd.isna(v) for v in dict(data.Close["LOL"]).values())

它检查收盘价是否所有值都为 nan。

此方法有效,但我认为不是最佳方法,可能有更好更简单的方法。希望有人能找到它:)

这是在 yfinance 包中抛出 'error' 的代码。这不是一个真正的错误,所以你可能想要覆盖相当大的函数 download

if shared._ERRORS:
    print('\n%.f Failed download%s:' % (
    len(shared._ERRORS), 's' if len(shared._ERRORS) > 1 else ''))
    # print(shared._ERRORS)
    print("\n".join(['- %s: %s' %
    v for v in list(shared._ERRORS.items())]))

编辑


如果找到获取失败下载的方法: 只需导入 shared.py 文件并获取 ERRORS 字典。 此字典存储下载方法的最后错误。它在下载前被重置,因此可以在下载后立即访问。

只需使用以下代码:

import yfinance.shared as shared

data = yf.download("A AA AAA Z LOL KE QP")
print(list(shared._ERRORS.keys()))