2016-08-04 8 views
1

一部のデータに関数をフィットさせていますが、いくつかの初期パラメータ値がオーバーフローエラーを引き起こします。私は自分のコードでそれを捕まえ、それに新しい初期パラメータを与えて、やり直したい。私の解決策はブロックを除いて入れ子にすることです。Pythonでネストされたtryブロックに同じelseブロックを使用します。

try: 
    foo(args1) 
except: 
    args2 = make_new_args() 
    try: 
     foo(args2) 
    except: 
     give_up_and_move_on() 
    else: 
     process_data() 
else: 
    process_data() 

else節のいずれかを削除する方法があるかどうかは、同じコードなので、私は疑問に思っていました。

+2

'give_up_and_move_on()'が何をするかによって決まります。例外を返すか、または発生させた場合は、2つの 'else'を取り除き、0の字下げレベルで' process_data() 'を使うことができます。 – Evert

+0

'process_data()'には、フィットオブジェクトからパラメータを抽出し、配列に挿入することが含まれます。オーバーフローエラーはパラメータの生成を防ぎます。したがって、オーバーフローエラーが2回スローされた場合、 'process_data()'は機能しません。代わりに 'give_up_and_move_on()'を使用する必要があります。 – Deb

答えて

0

これは引数に変更を加えたリトライロジックのようです。あなたはこれを試すことができます:

MAX_RETRIES = 2 
for retries in range(MAX_RETRIES): 
    try: 
     foo(args) 
    except: 
     args = make_new_args() 
    else: 
     process_data() 
     break 

    if retries + 1 >= MAX_RETRIES: 
     give_up_and_move_on() 
+0

ありがとう、これは私が探していたものです!私はそれをクリアする小さな調整を行いました。 'else'ブロックを' if'ブロックの代わりに 'for'ループで使用します。 – Deb

関連する問題