python中try, finally, return, raise的execution order

最近在做项目时经常会对try finally return以及raise的执行顺序感到困惑, 于是做了个实验:

实验1:

​ 先看第一段代码, 这里的执行顺序是:
代码1.png

分析:

​ finally是正如字面描述, 及时函数已经有return的情况下依然会执行, 你甚至可以覆盖return的结果.

实验2:
代码2.png

分析:
raise跟return, break一样, 遇到就会跳出block;
有意思的是, 原本以为exception的raise应该在finally之后, 实际却是在finally之后.

思考:

下面两端代码的输出是?
image.png image.png

结论:

1.
break return raise这些语句只会使程序跳出try/except/finally对应的block;

  1. finally的block总是在整个try/except之后执行;
  2. return的结果可以被重写;
  3. 函数的返回值在finally执行完毕以后才’’返回”;