首页 > 解决方案 > 为什么 finally 块中的 return 语句否定了 except 块中的引发?

问题描述

在我的 Python 脚本中,我想捕获一个异常,执行一些清理操作,然后raise再次捕获异常。由于清理对于成功和失败路径都是常见的,因此我尝试将其放入finally块中。但是,当我在块return内添加语句时,被否定。finallyraise

这是一个示例(我使用的是 Python 3.6.5):

def test():
    try:
        raise Exception('TEST')
    except:
        raise
    finally:
        print('FINALLY!')
        return ''

if __name__ == '__main__':
    test()
    print('SHOULD NOT REACH THIS LINE!')

知道为什么会这样吗?

标签: pythonexception

解决方案


这直接在docs中解决。

在一边:

  • except在执行orelse子句期间可能会发生异常。finally同样,在执行该子句后重新引发异常。

但是


推荐阅读