我很难找到“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
...
但是,如果我需要知道块中是否存在异常,会发生什么?即是否有任何替代方法可以为try-except-else做类似前面的 with block的事情?
一个用例示例:
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
我可以以pythonic的方式做类似的事情以避免一次又一次地重复相同的try-except模式吗?