python 异常处理
执行 try -- except -- else -- finally 中的各种情况(包含与不包含 return)
如果没有异常发生, try 中有 return 语句, 这个时候 else 块中的代码是没有办法执行到的, 但是 finally 语句中如果有 return 语句会修改最终的返回值, 我个人理解的是 try 中 return 语句先将要返回的值放在某个 CPU 寄存器,然后运行 finally 语句的时候修改了这个寄存器的值,最后在返回到 try 中的 return 语句返回修改后的值。
如果没有异常发生, try 中没有 return 语句,那么 else 块的代码是执行的,但是如果 else 中有 return, 那么也要先执行 finally 的代码, 返回值的修改与上面一条一致。
如果有异常发生,try 中的 return 语句肯定是执行不到, 在捕获异常的 except 语句中,如果存在 return 语句,那么也要先执行 finally 的代码,finally 里面的代码会修改最终的返回值,然后在从 except 块的 retrun 语句返回最终修改的返回值, 和第一条一致。
try 中有 return, else 也有 return,finally 也有 return:
这里因为没有发生异常, 所以会执行到 try 块中的 return 语句,但是 finally 又必须执行,所以执行 try 中 return 之前去执行了 finally 语句,并且可以认为,finally 语句修改了最后返回的值,将 try 中的返回值修改为 5 并最终返回,所以 else 语句并没有得到执行。
注意
python open file:不能把 open 语句放在 try 块里,因为当打开文件出现异常时,文件对象 file_object 无法执行 close() 方法。
正确方法:
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Python 文件名分解
下一篇: MyBatis 介绍和使用
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论