2014-04-29 3 views
0

J'ai une fonction python getstock() qui extrait les données du marché pour les entreprises aléatoires de yahoo pour analyse. De temps en temps, à un moment donné dans le script, si ma fonction entre dans une entreprise que Yahoo Finance ne reconnaît pas, je vais l'erreur suivante:Erreur lors de la gestion de Python avec IF

Traceback (most recent call last): 
    File "<pyshell#65>", line 8, in <module> 
    stockhistory=pandas.io.data.get_data_yahoo(stock, start=datetime(1900,1,1), end=datetime(2014,1,1)) 
    File "/usr/lib/python2.7/dist-packages/pandas/io/data.py", line 405, in get_data_yahoo 
    adjust_price, ret_index, chunksize, 'yahoo', name) 
    File "/usr/lib/python2.7/dist-packages/pandas/io/data.py", line 351, in _get_data_from 
    hist_data = src_fn(symbols, start, end, retry_count, pause) 
    File "/usr/lib/python2.7/dist-packages/pandas/io/data.py", line 200, in _get_hist_yahoo 
    return _retry_read_url(url, retry_count, pause, 'Yahoo!') 
    File "/usr/lib/python2.7/dist-packages/pandas/io/data.py", line 177, in _retry_read_url 
    "return a 200 for url %r" % (retry_count, name, url)) 
IOError: after 3 tries, Yahoo! did not return a 200 for url 'http://ichart.finance.yahoo.com/table.csv?s=LE&a=0&b=1&c=1900&d=0&e=1&f=2014&g=d&ignore=.csv' 

Cela peut être résolu en utilisant simplement une autre société (rappel de la fonction).

Ma question est: Comment puis-je écrire une instruction if qui indique effectivement "Si l'erreur ci-dessus se produit, exécutez à nouveau la fonction getstock()".

Répondre

1

En général, je le ferais comme ceci:

for stock in stocks: 
    try: 
     stockhistory = pandas.io.data.get_data_yahoo(stock, ...) 
    except IOError: 
     pass # it failed, skip on to next stock in stocks 
    else: 
     # it succeeded, process stockhistory here 
Questions connexes