Weird Try-Except-Else-Finally behavior with Return statements

核能气质少年 提交于 2019-11-26 14:27:49

Because finally statements are guaranteed to be executed (well, presuming no power outage or anything outside of Python's control). This means that before the function can return, it must run the finally block, which returns a different value.

The Python docs state:

When a return, break or continue statement is executed in the try suite of a try...finally statement, the finally clause is also executed ‘on the way out.’ A continue statement is illegal in the finally clause. (The reason is a problem with the current implementation — this restriction may be lifted in the future).

This means that when you try to return, the finally block is called, returning it's value, rather than the one that you would have had.

Fred Huang

The execution order is:

  1. try block all completes normally -> finally block -> function ends
  2. try block run and get into exception A -> finally block -> function ends
  3. try block make a return value and call return -> finally block -> popup return value -> function ends

So, any return in the finally block will end the steps in advance.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!