最近在做项目时经常会对try finally return以及raise的顺序感到困惑, 于是做了个实验:
先看第一段代码, 这里的执行顺序是:
代码1.png
从中可以看出:
finally毕竟是finally, 执行在函数已经写明return的情况下依然会执行, 甚至可以覆盖return的结果.
再看一段代码:
代码2.png
从中可以看出:
raise同学直接截胡了return同学;
Exception抛出的顺序在finally执行之后;
思考, 下面两端代码的输出是?
image.png
image.png
结论:
break return raise这些语句只会使程序跳出try/except/finally对应的block;
finally的block总是在整个try/except之后执行;
return的结果可以被重写;
函数的返回值在finally之后才''返回";