2017-10-22 5 views
1

私はループのために以下を作成して、パンダの価格データをティッカーのリストのために取得する機能を実行しました。基本的に、RemoteDataErrorを取得して3回の試行後にそのエラーを無視すると、ループは関数を再実行します。Python - ループのためのよりよい解決策 - 3回の試行の後にエラーを無視してそのエラーを無視して再実行

以下のforループはこの目的のためにうまくいきますが、forループの外側の試行回数にwhileループを置くように、以下のループからの試行回数を定義することができないため、 。試行回数= 0の変数を定義しようとしましたが、再実行するたびに1回の試行が追加されます。論理は試行+ = 1です。試行が3に達した場合は、続行を使用してエラーを無視します。しかし、それは動作しませんでした。おそらく、私は何かを間違って設定したでしょう。

for ticker in tickers: 
     print(ticker) 
     try: 
      get_price_for_ticker() 
     except RemoteDataError: 
      print('No information for {}'.format(ticker)) 
      try: 
       get_price_for_ticker() 
       print('Got data') 
      except RemoteDataError: 
       print('1st with no data') 
       try: 
        get_price_for_ticker() 
        print('Got data') 
       except RemoteDataError: 
        print('2nd with no data') 
        try: 
         get_price_for_ticker() 
         print('Got data') 
        except RemoteDataError: 
         print('3rd with no data (should have no data in the database)') 
         continue 

もっと良い方法がありますか?

+0

あなたは '試行'変数を使ったコードを表示する必要があります。そのコードで問題が発生しているかどうかを理解するだけです。もちろん 'attempts'を組み込む方法は、あなたは最高ではないにしても、ここで提供しています。 –

答えて

2

この目的に適した方法はありますか?

はい、あります。 whileループとカウンタを使用してください。

count = 0 
while count < 3: 
    try: 
     get_price_for_ticker() 
     break     # reach on success 
    except RemoteDataError: 
     print('Retrying {}'.format(count + 1)) 
     count += 1    # increment number of failed attempts 

if count == 3: 
    ...       # if count equals 3, the read was not successful 

このコードは、外側のforループ内に挿入する必要があります。または、tickerパラメータを受け入れるエラー処理コードwhile +で関数を定義し、forループの各繰り返しでが機能するようにを呼び出すことができます。それはスタイルの問題、そしてあなたまでです。

+0

あなたのお返事ありがとうございます。上記のforループの中にループを入れておくべきでしょうか? – MKYJ

+0

@MKYJはい、そうすべきです。あるいは、このループをティッカーパラメータを受け付ける関数に配置し、その関数をforループで呼び出すこともできます。どちらの方法でも動作するはずです。 –

+0

@MKYJまた、助けがあれば、投票して答えを受け入れることを忘れないでください(灰色のチェックを押して緑色に切り替える)。 –

関連する問題