2017-01-24 6 views
1

私はこれのようなことをしてばかげていますか?私は基本的にtry catchブロックの目的を理解していないように感じる。ループ内の複数のtry catchブロック

デーモンで自動パイロットで実行したいスクリプトがありますが、時にはリスト内の一部のリソースが完全に割り当てられているかどうかをチェックすることがあります。リソースが完全に割り当てられている場合、1つのことを続けることはできませんが、他にもできることがあります。 APIから何かを呼び出すため、APIによってスローされたExceptionは非常に一般的です(ちょうどAPI_Exceptionのように)。この状況で複数のtryブロックが無意味なのですか?

主な問題は、breakは私が、私はちょうどこれら二つのブロックを組み合わせて、一度ExceptionAをキャッチする必要があります。この場合、ループ

for: 
    try: 
     stuff() 
    except ExceptionA: 
     handle() 
     break 
    except ExceptionB: 
     report() 
     sys.exit() 
    try: 
     other_stuff() 
    except ExceptionA: 
     handle_in_a_different_way() 
     break 
    except ExceptionC: 
     report() 
     sys.exit() 

other_code_that_should_execute_if_there_is_a_break() 

から抜け出すことはできませんということでしょうか? ExceptionAに解析可能なパラメータが簡単にない可能性があります。

for: 
    try: 
     stuff() 
     other_stuff() 
    except ExceptionA: 
     if ExceptionA has param 
      handle() 
     elif ExceptionA has other param 
      handle_in_a_different_way() 
    except ExceptionB: 
     report() 
     sys.exit() 
    except ExceptionC: 
     report() 
     sys.exit() 
+0

後者の場合、 'except(ExceptionB、ExceptionC):'をグループ化することができます。 –

答えて

0

例外的にはあまり経験はありませんが、スタックに役立つ可能性があるものが見つかりました。

Catch multiple exceptions in one line (except block)

また、どのバージョン現在使用しているに依存し、それらを設定as'to」のpython 2に、あなたが例外を区切るためにコンマを使用することができますようだが、Pythonで3人が使用することをお勧め変数を指定すると、それらを扱う方法を検証することができます

関連する問題