#!/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中情况一样
网友评论