1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 总结Python编程中遇到的无数个“坑”(异常处理的正确过程)

总结Python编程中遇到的无数个“坑”(异常处理的正确过程)

时间:2024-06-26 06:59:34

相关推荐

总结Python编程中遇到的无数个“坑”(异常处理的正确过程)

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

图片来自网络

【引子】

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

try-except执行顺序

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

执行顺序演示

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

try-except-else-finally执行顺序

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

【特殊情况】

特殊例子如下图所示。

异常处理特例演示

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

程序运行结果

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

【特情分析】

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

【再举一个例子】

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

演示代码

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

程序运行结果

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。