例外を再発生させたい場合raise
は、それぞれのexcept
ブロックで引数なしで簡単に使用できます。しかし、ネストされた式のように
try:
something()
except SomeError as e:
try:
plan_B()
except AlsoFailsError:
raise e # I'd like to raise the SomeError as if plan_B()
# didn't raise the AlsoFailsError
SomeError
スタックトレースを壊さずにを再度レイズするにはどうすればよいですか?raise
この場合、単独で、より最近のものをリレイズしAlsoFailsError
ます。または、この問題を回避するためにコードをリファクタリングするにはどうすればよいですか?
arg
を受け入れる関数の内部にあるということです。プランを提供していarg.plan_B()
ないために発生する可能性のある呼び出しを試みますBAttributeError
arg
plan_B
例外を発生させることを許可したいためです
plan_B
戻る別の関数を入れてみましたか?その後、外側のブロックはちょうど可能性がありますTrue
False
except
if not try_plan_B(): raise