Как обработать тикер "not found" в yfinance? - PullRequest
0 голосов
/ 29 апреля 2020

Так что я пытаюсь получить некоторые данные о запасах в al oop (не уверен, смогу ли я передать массив), например:

def getData(ticker):
    print (ticker)
    data = pdr.get_data_yahoo(ticker, start=start_date, end=today)
    dataname= ticker+'_'+str(today)
    files.append(dataname)
    SaveData(data, dataname)

Но по некоторым причинам некоторые тикеры я кормлю pdr.get_data_yahoo() не найдены, а python выдает эту ошибку:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/pandas_datareader/yahoo/daily.py", line 157, in _read_one_data
    data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]
KeyError: 'HistoricalPriceStore'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "borsdata_api.py", line 65, in <module>
    getData(row['ticker'])
  File "borsdata_api.py", line 47, in getData
    data = pdr.get_data_yahoo(ticker, start=start_date, end=today)
  File "/usr/local/lib/python3.7/site-packages/pandas_datareader/data.py", line 82, in get_data_yahoo
    return YahooDailyReader(*args, **kwargs).read()
  File "/usr/local/lib/python3.7/site-packages/pandas_datareader/base.py", line 251, in read
    df = self._read_one_data(self.url, params=self._get_params(self.symbols))
  File "/usr/local/lib/python3.7/site-packages/pandas_datareader/yahoo/daily.py", line 160, in _read_one_data
    raise RemoteDataError(msg.format(symbol, self.__class__.__name__))
pandas_datareader._utils.RemoteDataError: No data fetched for symbol ADDV-TO-1.ST using YahooDailyReader

Можно ли просто пропустить эту итерацию и перейти к следующей в списке?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Вы можете попробовать пакет под названием yahooquery . Вы можете проверить символы перед получением любых данных:

from yahooquery import Ticker

list_of_tickers = [...]

tickers = Ticker(list_of_tickers)
valid_tickers = tickers.validation

# Keep only the valid tickers
tickers.symbols = [k for k, v in valid_tickers.items() if v]

# Then get your data
df = tickers.history(start=start_date)  # end is an argument and defaults to today
0 голосов
/ 29 апреля 2020
def getData(ticker):
    print (ticker)
    try:
        data = pdr.get_data_yahoo(ticker, start=start_date, end=today)
        dataname= ticker+'_'+str(today)
        files.append(dataname)
        SaveData(data, dataname)
    except:
        pass #or traceback.print_exc(), or traceback.format_exc()
        #print_exc() will raise the error and print traceback.
        #format_exc() will return the error as a string.
...