python异常处理语句的应用场景_总结Python编程中遇到的无数个“坑”(异常处理的正确过程)...

在开始前我们先来看一个关于try-excpet-else-finally的例子,我们通过这个例子来梳理下异常处理的正确顺序。今天这个“坑”跟这个顺序有关系,喜欢的朋友请耐心读下去,收获会很大哦!

5d6034a85edf8db1ade18cd67915de51574e7474.jpeg?token=441b087c41f919f0ff767db450917076&s=132097088B795C8E11D081D1030010B3图片来自网络

【引子】

例子是这样的,我们测试下这个顺序。

9825bc315c6034a82eff34dabb254a5109237603.jpeg?token=5e222b4f19596cd711b4e2a474468b60&s=E0E2B34042B0B87B44DD4C1F0100F0C2try-except执行顺序

程序运行结果如下图所示。

96dda144ad345982773ae6ed7cc232a8caef84dc.jpeg?token=9385f3dc701c6f1f8db9d55586b8427b&s=A5F07382DFE7B7604475B40F0000F0C3执行顺序演示

对于上面的例子我们总结try-except-else-finally执行的顺序如下图所示。

fc1f4134970a304e3707a578a0fea483c8175cc1.jpeg?token=e29352eeaf61fc7ae2592094d833a57f&s=B5B0EF37091A46CA12DD547B03007077try-except-else-finally执行顺序

我们知道异常处理要对程序发生的异常进行捕获,然后根据捕获的内容,相应执行不同的操作。当我们对这些异常进行捕获时,如果try语句中是个循环,finally语句中执行break操作,那么,except和else中的异常处理是否会正常执行呢?我们看下面的这个例子。

【特殊情况】

特殊例子如下图所示。

314e251f95cad1c8694eb1720f08640cc83d51ad.jpeg?token=91e9d5e5245e78241b301217e0028d31&s=A0C2B7481EE08B7C1671C40F000030C2异常处理特例演示

程序执行结果如下图所示。

96dda144ad345982ade60cf97cc232a8cbef842c.jpeg?token=1453d322982ce024bbde5615f8b85b27&s=A1E0F7069FA1B9604070B48B000070C1程序运行结果

我们抛出的IndexError异常居然神奇的消失了。为什么呢?下面我们进行分析。

【特情分析】

当try语句块中发生异常时,我们前篇讨论过,最好将异常raise,抛出给上层except处理,如果在except语句中找不到相应的异常处理代码,异常就会临时保存下来,当finally执行完毕后,临时保存的异常将会再次被抛出,但是如果finally中产生了新的异常或者执行了return、break等语句,那么临时保存的异常就会被丢失,从而导致这个临时存储的异常被屏蔽掉了,我们在使用的时候一定要注意这个异常屏蔽,否则很容易掉“坑”里面了……

【再举一个例子】

我们再使用一个例子来看下上面的知识点。

6a63f6246b600c337397097a6a7a520ad8f9a156.jpeg?token=59693c870bd09d6b4371f82255f3ea75&s=E0C2B3405BB49E490469240D010030C2演示代码

程序运行结果如下图所示。

8694a4c27d1ed21be1446a7add58dec150da3f5f.jpeg?token=bbc55b27418e8d6d62b0484d9b25b053&s=A5F25383D7B08968026D6C8F0300B0C0程序运行结果

【总结】对于上例中前两个数据传入了小于0的数据,则抛出异常由except进行处理,完了之后返回finally中的-1;但是后面的参数传入了大于0的值,调用了else后面的语句执行了之后,按常理来说应该返回传入数值本身,但是由于存在finally语句,在执行else中return a语句之前会先执行finally语句,由于此时finally语句中有一个return -1,程序就直接返回了,所以永远不会返回传入数据本身,在实际开发应用中,应该尽量避免在finally中使用return返回,这种处理方式不仅使程序不可读而且还能带来不必要的麻烦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值