发布于 5年前

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)
©2020 edoou.com   京ICP备16001874号-3