简体   繁体   中英

Python try except fail to catch RemoteDataError

I am using the following code to read data from yahoo finance from a list symbols downloaded from nasdaq.

pnls = {i:dreader.DataReader(i,'yahoo','1985-01-01','2017-03-30') for i in symbols}

for df_name in pnls:
    try: 
        pnls.get(df_name).to_csv("/Users/Jiong/Documents/data/{}_data.csv".format(df_name), index=True, header=True)
    except: 
        print("error {}".format(df_name))
    else: 
        print("done {}".format(df_name))  

Guess some symbols may not be valid and Yahoo Finance throws RemoteDataError Exception .

The code above is supposed to continue on, but it stopped still at the errors.

Isn't except to catch all exceptions? or this is run time error ?

Anyway to get the code ignores it and continue? Thanks. See errors below running

118         if params is not None and len(params) > 0:
119             url = url + "?" + urlencode(params)
--> 120         raise RemoteDataError('Unable to read URL: {0}'.format(url))
121 
122     def _read_lines(self, out):

RemoteDataError: Unable to read URL: http://ichart.finance.yahoo.com/table.csv?c=1985&f=2017&s=MITT%5EA&g=d&ignore=.csv&d=2&e=30&a=0&b=1

You need to handle the raise exception or it will halt at the place of raised. So, if a raise exception is not caught and handled, it will be interrupted.

What you need is something like this :

except RemoteDataError as exp : 
    print('Unable to read URL: {0}'.format(url))

You can refer to this documentation for more details on errors.

Grabbed this import from another page; it seemed to correct the issue for me. I was getting a remote error while trying to pull stock data from Yahoo. You'll need to do the following import prior to adding the RemoteDataError exception:

from pandas_datareader._utils import RemoteDataError

df_ = pd.DataFrame()
for i in assets:
    print(i)
    try:
        vec = web.DataReader(i, 'yahoo', start='12/10/2006', end='2/1/2007')
        vec['asset'] = i
        vec['returns_close_raw'] = np.log(vec.Close/vec.Close.shift())
        vec['returns_open_raw'] = np.log(vec.Open/vec.Open.shift())
        vec['returns_open_raw10'] = np.log(vec.Open/vec.Open.shift(10))
        vec['returns_close_raw10'] = np.log(vec.Close/vec.Close.shift(10))
        df_ = pd.concat([df_, vec])

    except RemoteDataError:
        print('remote error')

    except KeyError:
        print('key error')


The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM