美文网首页
python try except finally 中带retu

python try except finally 中带retu

作者: llicety | 来源:发表于2018-02-25 16:04 被阅读0次
    #!/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中情况一样

    相关文章

      网友评论

          本文标题:python try except finally 中带retu

          本文链接:https://www.haomeiwen.com/subject/yqurxftx.html