ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python try-except-else-finally的执行顺序

2022-05-23 19:02:04  阅读:288  来源: 互联网

标签:return python except else try finally print


执行顺序:第一位肯定是try,而且后边的所有操作都依赖于try,有三点特别重要:
**
(1)try无论执行成功失败,都会执行finally,
(2)try、else、except中如果有return,当代码执行到return之后,会直接跳转到finally中,开始执行finally中的所有语句,包括return,(敲黑板,是包括return的,return执行完,程序就结束了,不会再执行try、else、except中的return)
(3)当except没有捕获try中抛出的异常时,会直接执行finally,这个时候,如果finally中没有return,则finally中的代码执行完成之后,try中的异常会被抛出,但是如果finally中有return,则不会抛出异常。
**
是不是有点不太直观,那就按照下边的思路开始捋一捋:

  1. 我有一段代码,可能有问题,如果出现异常,我不想让他报错,怎么办?
  • 答案是用try/except包裹起来,如果try中的代码没有异常,那程序就开始依次执行。如果try中报错了,就开始在except中捕获抛出的异常并进行处理,不会再将异常抛出,影响到其他代码的执行。
点击查看代码
`try:
  print('try')
  print(1/0)
except Exception as e:
  print('报错信息')

执行结果:
try
报错信息

2. 我有一段代码,不太稳定,如果发生异常,我需要对异常进行操作,但是如果正常,我又需要执行相应的处理逻辑,这个时候,else就来了,如果我们try中的代码,都顺利执行了,并且没有return(return是另外的情况), 就会开始执行else中的代码:
点击查看代码
        try:
            print('try')
          #  print(1/0)
        except Exception as e:
            print('报错信息')
        else:
            print('else ')

执行结果:
try
else

  1. 如果我们在try、except、或者else之外,还有一些必须要做的执行步骤,例如,写入文件异常时,对文件的关闭等操作,可以放在finally中。如果有finally,finally一定会执行,切记,是一定会执行。,一般是有两种情况,(1)按照上边两种执行逻辑,执行完成之后,就会执行finally,(2)如果try、except、else中如果有return,会直接跳过return,直接执行finally。。
点击查看代码
        try:
            print('try')
            print(1/0)
        except Exception as e:
            print('报错信息')
        else:
            print('else ')
        finally:
            print('finally打印纸')
            # print(1/0)
            return 'finally返回值'


try
报错信息
finally打印纸
finally返回值

  1. Q&A:
  • 如果finally中没有return,那try、else、except中的return会执行吗?
  • 如果finally中出现异常,会被捕获吗?
    finally中,如果出现异常,会直接抛出异常。
  • 如果try中的异常没有被捕获,会怎么办?
    如果try中的异常没有被捕获,则会直接执行finally中的代码,如果finally中有return的代码,则会直接return,不会报错,但是如果没有return, 那么finally执行完成之后,会直接将try中的异常抛出。。

标签:return,python,except,else,try,finally,print
来源: https://www.cnblogs.com/lhg37927/p/16302403.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有