Python异常处理之finally

python异常处理

try:
	这里放置可能出错的代码
except Exception as e:
	这里放置try出现异常时,对于异常进行处理的代码
else:
	这里放置try没有出现异常继续执行的代码
finally:
	这里放置的是无论代码是否出现异常都会执行的代码

作为一名python初学者,我对异常处理的finally很感兴趣

对于finally功能的一般解释

无论 try 块是否引发错误,都将始终执行 finally 块
开始看起来没什么问题
比如下面这段代码:

def add_num():
    try:
        num1 = 1
        num2 = 0
        res = num1 / num2
        print(f'结果是:{res}')
    except Exception as e:
        print(f"出错了,错误类型是:{e}")
    finally:
        print("add_num函数执行完毕")


print(add_num())

# 出错了,错误类型是:division by zero
# add_num函数执行完毕
# None

但是如果except语句里的print变成了return,会怎么样呢
我们知道函数里遇到return 程序就结束了,但是你看下面的代码,奇怪的事出现了

def add_num():
    try:
        num1 = 1
        num2 = 0
        res = num1 / num2
    except Exception as e:
        return f"出错了,错误类型是:{e}"
    finally:
        print("add_num函数执行完毕")


print(add_num())

# add_num函数执行完毕
# 出错了,错误类型是:division by zero

异常处理中遇到return的时候竟然跳过了,跑去执行finally里的语句,最后才执行return

遇到这种情况,我很是疑惑,专门去查了资料,才明白为什么这样

对异常处理中finally正确完整的解释

无论前面try和except怎么样,python一定会保证finally的语句得执行完!

Python的一切设计都是围绕着这个核心思想来的,费尽心机就是在做这件事情。
因此,前面try子句(clause),或者except子句中如果有会导致程序终止的异常,比如return,那么 python会先把这个封存起来,等到finally执行完再把异常抛出来
所以你能看到异常出现在 finally输出结果之后的,意不意外?

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值