私はPythonで操作しようとしていますが、失敗した場合はを特定の方法で受け取ります。 10回まで再試行します。それ以外の方法でが失敗した場合すぐに失敗したい。 10回の再試行後、私はすべての失敗を発信者に伝えたい。条件付きで操作を再試行するためのPythonフローコントロール
私はフローコントロールを満足のいく方法でコーディングすることができませんでした。ここでは行動の一例だ私がしたい(ただし、スタイル!):
def run():
max_retries = 10
for retry_index in range(max_retries):
try:
result = run_operation()
except OneTypeOfError:
if retry_index < max_retries - 1:
continue
else:
raise
if result.another_type_of_error:
if retry_index < max_retries - 1:
continue
else:
raise AnotherTypeOfError()
try:
result.do_a_followup_operation()
except AThirdTypeOfError:
if retry_index < max_retries - 1:
continue
else:
raise
return result
raise Exception("We don't expect to end up here")
が最初に私は私はちょうどこれがそう再試行ロジックは、エラー処理ロジックから分離しているリファクタリングと考えていました。問題は、たとえば、OneTypeOfErrorがresult.do_a_followup_operation()によって呼び出された場合、その場合は再試行したくないということです。私は上記の特定の状況でのみ再試行したい。
私はおそらく、結果を返す関数、発生した例外(もしあれば)、および再試行可能な例外かどうかを示すフラグにリファクタリングできると考えました。どういうわけか、それは私には上記よりもあまりエレガントではなかった。
私はここに役立つかもしれないPythonのフロー制御パターンがあるのだろうかと思います。
あなたは[ブロックを除き、複数を持っている]ことができます(https://stackoverflow.com/questions/6095717/python-one-try-multiple-except)これは確かにはるかにエレガントな私には感じない – JETM