try finally执行顺序 python_python中return语句在try except else finally中的执行顺序

python中return语句在try except else finally中的执行顺序

python版本: 3.7

首先先看下try except else finally的例子

def exe_try():

try:

print("start")

raise KeyError

return 1

except KeyError as e:

print("key error")

return 2

else:

print("other")

return 3

finally:

print("finally")

# return 4

result = exe_try()

print(result)

# 可以看到它的执行结果是:

# start

# key error

# finally

# 4

# exe_try函数中它捕获了KeyError异常,可为什么没有返回2而是返回4呢?

# 这里涉及到return语句在 try except finally中的用法:

# 如果finally中有return语句, 它返回finally里的return语句,

# 如果finally没有return语句, 它就会返回前面调用的return语句

# 执行过程:

# exe_try函数在执行时,打印start, 接着遇到KeyError异常

# 接着这个异常被捕获,执行except 中的代码块: 打印了key error, 并执行return 2

# 但是这个return 2并不会直接返回,而是把它放入了堆栈中

# 然后接着往下执行finally中的代码块: 打印finally,执行return 4

# 在这里它依然不会直接返回4, 而是把它也放在堆栈中

# 这时整个try except else finally都执行完了,它会在栈顶取出return并返回

# 而finally中的return是后放入到栈中,所以它在栈顶,取出并返回了 4。

# 如果finally中没有return语句,则会返回:

# start

# key error

# finally

# 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值