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

转载于:https://my.oschina.net/u/4153263/blog/3072013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值