【问题标题】:How to detect failed downloads using yfinance如何使用 yfinance 检测失败的下载
【发布时间】:2021-08-13 20:42:56
【问题描述】:

我正在使用 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”失败?

【问题讨论】:

    标签: python yfinance


    【解决方案1】:

    这是在 yfinance 包中引发“错误”的代码。这不是一个实际的错误,因此您可能想要覆盖函数 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 字典。 此 dict 存储下载方法的最后一个错误。它在下载之前被重置,因此可以在下载之后立即访问。

    只需使用以下代码:

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

    【讨论】:

    • 非常感谢,它运行良好:)
    【解决方案2】:

    在对数据输出多玩了一会儿之后,我发现了一种检查失败值的不优雅的方法,例如元素“LOL”:

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

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

    这种方法有效,但我认为不是最优的,可能有更好、更简单的方法。让我们希望有人找到它:)

    【讨论】:

      猜你喜欢
      • 2017-11-04
      • 2011-05-04
      • 1970-01-01
      • 2021-09-28
      • 2011-09-13
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      相关资源
      最近更新 更多