Python новичок здесь (извините, если это глупый вопрос)!В настоящее время я использую цикл for для загрузки и обработки данных.К сожалению, я иногда сталкиваюсь с краткими сетевыми проблемами, которые приводят к сбою частей цикла.
Первоначально я делал что-то вроде этого:
# Import Modules
import fix_yahoo_finance as yf
import pandas as pd
from stockstats import StockDataFrame as sdf
# Stock Tickers to Gather Data For - in my full code I have thousands of tickers
Ticker = ['MSFT','SPY','GOOG']
# Data Start and End Data
Data_Start_Date = '2017-03-01'
Data_End_Date = '2017-06-01'
# Create Data List to Append
DataList = pd.DataFrame([])
# Initialize Loop
for i in Ticker:
# Download Data
data = yf.download(i, Data_Start_Date, Data_End_Date)
# Create StockDataFrame
stock_df = sdf.retype(data)
# Calculate RSI
data['rsi'] = stock_df['rsi_14']
DataList.append(pd.DataFrame(data))
DataList.to_csv('DataList.csv',header=True,index=True)
С этой базовой компоновкой, когда бы у меня не былосетевая ошибка, это привело к остановке всей программы и появлению ошибки.
Я провел некоторое исследование и попытался изменить цикл for следующим образом:
for i in Ticker:
try:
# Download Data
data = yf.download(i, Data_Start_Date, Data_End_Date)
# Create StockDataFrame
stock_df = sdf.retype(data)
# Calculate RSI
data['rsi'] = stock_df['rsi_14']
DataList.append(pd.DataFrame(data))
except:
continue
С этим,код всегда выполнялся без проблем, но всякий раз, когда я сталкивался с сетевой ошибкой, он пропускал все тикеры, на которых он работал (не удалось загрузить их данные).
Я хочу, чтобы это загружало данные для каждого тикера один раз.Если это не удается, я хочу, чтобы он повторил попытку, пока не получится один раз, а затем перешел к следующему тикеру.Я попытался использовать while True
и его варианты, но это заставило цикл загружать один и тот же тикер несколько раз!
Любая помощь или совет очень важны!Спасибо!