これを行うための「pythonic」な方法を見つけるのに苦労しています。同じtry-exceptパターンで異なるコード ブロックをキャッチする必要があります。キャッチするブロックはそれぞれ異なります。現在、コードのいくつかのポイントで、例外の長いリストを使用して、同じtry-exceptパターンを繰り返しています。
try:
block to catch
except E1, e:
log and do something
except E2, e:
log and do something
...
except Exception, e:
log and do something
with ステートメントとコンテキスト マネージャーデコレーターを使用して、これを解決する良い方法があります。
from contextlib import contextmanager
@contextmanager
def error_handler():
try:
yield
except E1, e:
log and do something
...
except Exception, e:
log and do something
...
with error_handler():
block to catch
...
しかし、ブロックに例外があったかどうかを知る必要がある場合はどうなりますか? つまり、前のwith ブロックのtry-except-else のようなことを行う代替手段はありますか?
使用例:
for var in vars:
try:
block to catch
except E1, e:
log and do something
# continue to the next loop iteration
except E2, e:
log and do something
# continue to the next loop iteration
...
except Exception, e:
log and do something
# continue to the next loop iteration
else:
do something else
同じtry-exceptパターンを何度も繰り返さないように、pythonicな方法でそのようなことをすることはできますか?