再帰を回避するために何が必要かを理解するには、例外をキャッチする必要があります (編集: Exception から派生したものだけでなく、KeyboardInterrupt やユーザー例外を含むすべての例外)、それを変数に入れ、後で再発生させますcatch ブロックの外側に配置します。基本的に、私は独自の最終ブロックをロールしようとしています。これは可能ですか?
実際の問題は、多数のクリーンアップ関数を呼び出すことです。それらのいずれかが失敗した場合は、他のすべても呼び出す必要があり、失敗した関数の例外は引き続き伝播する必要があります。これが私の現在の解決策です。Popenオブジェクトのリストを取ります:
def cleanupProcs(procs):
if not procs:
return
proc = procs.pop(0)
try:
proc.terminate()
proc.wait()
finally:
cleanupProcs(procs)
これを行う反復的な方法はありますか?よりエレガントな方法は?より Pythonic な方法ですか?