最近在做项目时经常会对try finally return以及raise的执行顺序感到困惑, 于是做了个实验:
实验1:
先看第一段代码, 这里的执行顺序是:
分析:
finally是正如字面描述, 及时函数已经有return的情况下依然会执行, 你甚至可以覆盖return的结果.
实验2:
分析:
raise跟return, break一样, 遇到就会跳出block;
有意思的是, 原本以为exception的raise应该在finally之后, 实际却是在finally之后.
思考:
下面两端代码的输出是?
结论:
1.
break return raise这些语句只会使程序跳出try/except/finally对应的block;
- finally的block总是在整个try/except之后执行;
- return的结果可以被重写;
- 函数的返回值在finally执行完毕以后才’’返回”;
近期评论