python 异常处理

发布于 2024-09-08 18:15:13 字数 1044 浏览 10 评论 0

执行 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

北城挽邺

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文