发布于 2年前
                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)
 
             
             
             
             
            