发布于 1年前
Python在finally里怎么判断try代码块是否有异常抛出
方法一:
可以实现一个contextmanager来统一处理需要异常状态。
class hasRaisedException:
__slots__ = ('exception_happened', ) # instances will take less memory
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
# 如果没有异常抛出`exc_type`为None
self.exception_happened = exc_type is not None
使用
try:
with hasRaisedException() as error_state:
# 逻辑代码
finally:
if error_state.exception_happened:
print('有异常抛出')
方法二:
如果不考虑复用的情况,可以使用一些标记来判断。
pass = False
try:
#逻辑代码
pass = True
except HandleThis:
# 处理代码
finally:
logger.info('pass=%s', pass)