user17691474
user17691474

Reputation: 1

YFinance JSONDecodeError--latest version

When I tried to dowload historic data, I get the following error message:

Exception in thread Thread-6:
Traceback (most recent call last):
  File "E:\Anaconda\envs\finrl\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "E:\Anaconda\envs\finrl\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "E:\Anaconda\envs\finrl\lib\site-packages\multitasking\__init__.py", line 104, in _run_via_pool
    return callee(*args, **kwargs)
  File "E:\Anaconda\envs\finrl\lib\site-packages\yfinance\multi.py", line 169, in _download_one_threaded
    data = _download_one(ticker, start, end, auto_adjust, back_adjust,
  File "E:\Anaconda\envs\finrl\lib\site-packages\yfinance\multi.py", line 181, in _download_one
    return Ticker(ticker).history(period=period, interval=interval,
  File "E:\Anaconda\envs\finrl\lib\site-packages\yfinance\base.py", line 162, in history
    data = data.json()
  File "E:\Anaconda\envs\finrl\lib\site-packages\requests\models.py", line 910, in json
    return complexjson.loads(self.text, **kwargs)
  File "E:\Anaconda\envs\finrl\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "E:\Anaconda\envs\finrl\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "E:\Anaconda\envs\finrl\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)

here is my code:

import yfinance as yf
data = yf.download("SPY AAPL", start="2017-01-01", end="2017-04-30")

I have tried many methods:

  1. install the latest version of yfinance
  2. install the old version of yfinance
  3. revise the code

In fact, when I use yahoo_fin, the same error occurs too. Wish someone to help me solve this problem

Upvotes: -1

Views: 439

Answers (1)

Jorge Espinar
Jorge Espinar

Reputation: 394

your code is correct.

This is happening because Anaconda is used to simulate an environment so packets have determined versions so that everything is compatible. The thing that happens in your case is that yfinance is older and your version of JSON is not compatible with some functions of yfinance since yfinance is no anymore updated.

I recommend you to just install on your computer with pip the packet yfinance as follows instead of using the environment of anaconda:

pip install yfinance

and then it should try to get the correct versions of the libraries that it needs. After that, you can create a python file and then import the packet

import yfinance as yf

and then execute your download code

data = yf.download("SPY AAPL", start="2017-01-01", end="2017-04-30")

As a recommendation, try to pass different values as a list instead of a string, because it will be hard to debug later. Instead of "SPY AAPL" -> ['SPY', 'AAPL']

Edit: Also it can be that your finance version is YEARS old (but I don't think so), is this is the case then you should try to update inside of the anaconda updater. Otherwise, with the terminal, it would be something like:

pip install yfinance --upgrade

Upvotes: 1

Related Questions