python try except finally 中带return的执行顺序

#!/usr/bin/env python
#-*- coding: utf-8 -*-

def get_try_except_finaly_return():
    i = 0
    try:
        i = i + 1;
        print "try"
        raise
        return i
        
    except Exception as error:
        print 'exception'
        i+=1
        return i
    else:
        print 'else'
        i+=1
        return i
    finally:
        print 'finally'
        i+=1
        #return i
    print "xxxx"

if __name__ == '__main__':
    print get_try_except_finaly_return()

总结:
通常return表示一个函数的返回,也就是执行到return语句后,该函数就终止了,该函数的后续语句就不再执行了
但在try except finally语句块中有特殊情况。
1.不管怎样,finally的代码是会永远执行的,这也就是为什么try except模式可以实现和with语句一样的上下文管理器。
2.try except finally语句块中的return是暂存起来的,执行到return语句时,并没有直接返回
3.当try语句块中没有异常抛出,且有return时
a) 当return的变量是不可变对象,且finally中没有return语句,那么不管finally中语句块是否有改变return的值,都不会改变返回值
b)当return的变量是不可变对象,而finally中有return语句,那么finally中的return会覆盖前面的return
c)当return的变量是可变对象,且finally中没有return语句,那么在finally中语句块中如果改变了return的那个对象,return值将会发生改变。(比如前面返回的是一个列表)
4.当try语句块中有异常抛出,且except代码模块中有return时,与第3中情况一样

    原文作者:llicety
    原文地址: https://www.jianshu.com/p/5cf04a868032
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞