Python异常处理中容易犯得错误总结
Python异常处理机制
如果try异常处理中存在finally,finally中的代码总会得到执行
下面例子只是作为演示,不用去纠结业务逻辑
容易犯的错误1
看下面的代码,写出输出结果
def dig_dig1(): while True: print("I'm in while loop") try: print("I'm in try") raise EOFError except IOError: print("IOEoor") finally: print("I'm in finally") break dig_dig1()
原以为会输出的结果:
I'm in while loop I'm in try I'm in finally EOFError Process finished with exit code 1
运行结果
I'm in while loop I'm in try I'm in finally Process finished with exit code 0
- 如果异常处理中存在finally, finally总会被执行;
- 那么在执行finally之前,try中的产生的异常将会被临时保存起来,当finally的代码执行完成后,再抛出异常;
- 但当finally中存在raise或return或break时, try中的异常将会被抛弃。
容易犯的错误2
看下面的代码,写出输出结果
def dig_dig2(index): try: print("I'm in try") if index < 0: raise IndexError else: return index except IndexError: print("I'm in except") return "except" finally: print("I'm in finally") return "finally" print(dig_dig2(12))
原以为会输出的结果:
I'm in try 12
运行结果
I'm in try I'm in finally finally Process finished with exit code 0
- 如果异常处理中存在finally, finally总会被执行。
- 如果在try块语句中存在return的同时又存在finally块语句,那么将会在执行try块语句中return语句之前去执行finally语句块,然后再回来执行try块语句中return语句。
- 但是例子中在finally块语句中存在return语句,整个函数已结束,所以try块语句中return语句将永远得不到执行。
总结
一般情况下,如果异常处理中存在finally, finally总会被执行。但是,存在以下情况就需要注意:
- 在执行finally之前,try中的产生的异常将会被临时保存起来,当finally的代码执行完成后,再抛出异常; 但当finally中存在raise或return或break时, try中的异常将会被抛弃。
- 如果在try块语句中存在return的同时又存在finally块语句,那么将会在执行try块语句中return语句之前去执行finally语句块,然后再回来执行try块语句中return语句。但是在finally块语句中存在return语句,整个函数已结束,所以try块语句中return语句将永远得不到执行。
以上就是Python异常处理中容易犯得错误总结的详细内容,更多关于python 异常处理的资料请关注脚本之家其它相关文章!
相关文章
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
这篇文章主要介绍了解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧2020-06-06Python中bytes字节串和string字符串之间的转换方法
python中字节字符串不能格式化,获取到的网页有时候是字节字符串,需要转化后再解析,下面这篇文章主要给大家介绍了关于Python中bytes字节串和string字符串之间的转换方法,需要的朋友可以参考下2022-01-01python3实现语音转文字(语音识别)和文字转语音(语音合成)
这篇文章主要介绍了python3实现语音转文字(语音识别)和文字转语音(语音合成),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-10-10window环境pip切换国内源(pip安装异常缓慢的问题)
这篇文章主要介绍了window环境pip切换国内源(pip安装异常缓慢的问题),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12通过Python的filestools库给图片添加全图水印的示例详解
这篇文章主要介绍了通过Python的filestools库给图片添加全图水印,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
下面小编就为大家分享一篇浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-04-04
最新评论