python 在finally中放return导致except中的raise没有抛出的坑


def e_try():
    try:
        raise Exception('我的错')
    except Exception as e:
        print('捉到:%s' % e)
        raise
    finally:
        print('来到finally')
        return print('return了,你见不到except中raise的东西罗')  # TODO 这是不小心的坑


e_try()


def e_try2():
    try:
        raise Exception('我的错')
    except Exception as e:
        print('捉到:%s' % e)
        raise
    finally:
        print('来到finally,在我之后,你会见到except中raise信息,因为它在我之后处理')

    return print('raise暴发了,你看不到我的')


e_try2()


运行结果:


mac:edm-python qidizi$ python3 test.py 
捉到:我的错
来到finally
return了,你见不到except中raise的东西罗
捉到:我的错
来到finally,在我之后,你会见到except中raise信息,因为它在我之后处理
Traceback (most recent call last):
  File "test.py", line 27, in <module>
    e_try2()
  File "test.py", line 17, in e_try2
    raise Exception('我的错')
Exception: 我的错
mac:edm-python qidizi$ 

原因是finally先执行,再去处理except中的raise

发表于 2019.08.07 14:50:24

前篇:mac系统编译c源文件时,提示找不到`/usr/include`处理方法

后篇:关于python print时出现`UnicodeEncodeError: 'utf-8' codec can't encode character '\ud800' in position 1: surrogates not allowed`问题