我有一个问题,就是想找到一种“Pythonic”的方法来解决这个问题:
我需要使用相同的try-except模式捕获不同的代码块。
需要捕获的代码块彼此不同。
目前,我在代码中的多个点上重复使用相同的try-except模式,并列出了一长串异常。
我能用Python的方式进行类似的操作来避免重复使用相同的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
我能用Python的方式进行类似的操作来避免重复使用相同的try-except模式吗?