2017-02-09 7 views
2

このユースケースのためのpythonでの標準的なメカニズムがある場合、私は疑問に思って:Pythonで遅延例外が発生しますか?

try: 
    do_a() 
    if something_happens(): 
     raise DelayedException # is really only raised after do_b() 
    do_b() 
except DelayedException as de: 
    # handle de after the entire try/except block completed 

私は明らかにちょうど後で処理するために、変数に例外情報を格納することができ、そのようなaが存在する場合、私は思ったんだけどメカニズムはPythonに組み込まれています(違いがあれば3.x)。

EDIT: 明らかに、私の使用例では、例外処理ではdo_b()の結果が必要です。

+0

あなたは 'do_b()は'独自の例外を上げた場合に発生するのでしょうか? –

+2

try-finallyブロック(finallyブロックの 'do_b()')で 'do_something()'をラップしませんか? – dhke

+2

いいえ、ものではありません。これは例外の使用例のようには見えません。エラーを記録して後でチェックしてください。 – user2357112

答えて

1

うん、それは醜いです:

try: 
    do_a() 
    try: 
     if do_something(): 
      raise DelayedException() 
    finally: 
     do_b() 
except DelayedException: 
    pass 
+0

本当にちょっと醜いです!これがどのように作用するのかを理解するために私はいくつかの読みが必要だったので、それは良い兆候ではないと思います。おそらく変数を使用すると、意図がより明確になります。 –

関連する問題