【问题标题】:yfinance json.decoder.JSONDecodeErroryfinance json.decoder.JSONDecodeError
【发布时间】:2021-09-20 11:31:03
【问题描述】:

在今天之前它一直在工作。 我不知道为什么它今天不起作用。

import yfinance as yf
df = yf.Ticker('MMM').history(start='2021-01-01',end='2021-07-10')
File "D:\anaconda3\envs\tensorflow\lib\site-packages\yfinance\base.py", line 157, in history
data = data.json()
File "D:\anaconda3\envs\tensorflow\lib\site-packages\requests\models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "D:\anaconda3\envs\tensorflow\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "D:\anaconda3\envs\tensorflow\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\anaconda3\envs\tensorflow\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

【问题讨论】:

  • 你试过用pip install yfinance==0.1.62升级到最新版本吗?
  • 当前版本出错,需要升级到最新版本(0.1.62)。
  • 自 2021 年 11 月 8 日起,0.1.63 和 0.1.64 也出现此问题。回滚到 0.1.62 没有帮助。

标签: python yfinance


【解决方案1】:

我升级到最新版本,问题解决了。最新版本安装码:pip install yfinance==0.1.62

【讨论】:

  • 谢谢你,这绝对成功了!这是我一直在寻找的答案。您知道为什么会出现这个问题以及该版本与最新版本 (0.1.63) 之间的区别吗?
  • @JaredCohen 他们更改了接收数据的站点。我在尝试解决它时注意到了这个错误。示例 URL:BTC-USD 密钥已更改以满足先前版本中的请求。谢谢你的评论:)
【解决方案2】:

如果有人仍然面临 jsonDecoder 错误的问题。尝试从 pycharm 文件夹的 venv 中删除 yfin。不知何故,我的系统没有在 pycharm 的 venv 中升级 yfin。我不得不手动删除 yfin 文件夹并升级 yfin。它现在为我工作。谢谢 https://stackoverflow.com/a/68601710/16442394

【讨论】:

    【解决方案3】:

    以下补丁修复了我的问题: 在 /usr/local/lib/python3.8/dist-packages/yfinance/base.py 进行以下更改:

            # Getting data from json
            num_tries = 4
            url = "{}/v8/finance/chart/{}".format(self._base_url, self.ticker)
            while num_tries > 0:
                data = self.session.get(
                    url=url,
                    params=params,
                    proxies=proxy,
                    headers=utils.user_agent_headers
                )
                if "Will be right back" in data.text:
                    raise RuntimeError("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***\n"
                                   "Our engineers are working quickly to resolve "
                                   "the issue. Thank you for your patience.")
                if data.status_code == 404:
                    _time.sleep(0.5)
                    num_tries -= 1
                    continue
                else:
                    data = data.json()
                    break
            if num_tries == 0:
                print("%s failed to get information"%self.ticker)
                data = {}
    

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2021-07-24
      • 1970-01-01
      • 2023-01-08
      相关资源
      最近更新 更多