当前位置:   article > 正文

python(39): 异常处理try...except…finally的执行规则_try except finally的执行方式

try except finally的执行方式

一. 异常处理代码

1.1 try...except...

  1. try:
  2. print('可能出现异常的代码')
  3. except (Error1, Error2, Error3, ...) as e:
  4. print('处理异常的代码')
  5. except Exception:
  6. print('处理异常的代码')
  7. #Error: 异常类型,一个except代码块可以同时处理多种异常类型
  8. #Exception : 表示所有异常类型,一般用在最后一个except块中

1.2 try...except...else...

  1. try:
  2. print(ss)
  3. except (ZeroDivisionError, NameError) as e:
  4. print('出现了除0错误和访问未声明变量错误中的一种')
  5. except:
  6. print('其他错误类型')
  7. else:
  8. print('没有异常时执行')

1.3 try...except...finally...

  1. try:
  2. print(ss)
  3. except Exception as e:
  4. print('出现了除0错误和访问未声明变量错误中的一种')
  5. finally:
  6. print('无论是否异常都会走的到此处')

finally可以结合try...excepttry...except...else使用,也可以仅有tryfinally

1. 一定要避免在finally中编写return,raise等会终止函数的语句

二. 使用traceback打印详细信息

  1. import traceback
  2. try:
  3. 1/0
  4. except:
  5. print(traceback.print_exc()) #打印报错详细堆栈信息

三. return出现在try中时执行顺序

3.1 情况1

  1. def abc():
  2. re = []
  3. re_f = 'finally'
  4. try:
  5. re.append(1)
  6. return re
  7. 1 / 0
  8. except Exception:
  9. print('in except ')
  10. re.append(2)
  11. return re
  12. finally:
  13. print('in finally')
  14. re.append(3)
  15. #return re_f
  16. print(abc())
  17. 》》in finally
  18. 》》[1, 3]
  19. 》》 结论:try下面有return时,需要执行finally再执行try下的reutrn

3.2 情况2

  1. def abc():
  2. re = []
  3. re_f = 'finally'
  4. try:
  5. re.append(1)
  6. 1 / 0
  7. except Exception:
  8. print('in except ')
  9. re.append(2)
  10. return re
  11. finally:
  12. print('in finally')
  13. re.append(3)
  14. #return re_f
  15. print(abc())
  16. 》》》
  17. in except
  18. in finally
  19. [1, 2, 3]
  20. 》》》
  21. 结论:except下有return时,会先执行finally中的语句再执行except中的return

3.3 情况3

  1. def abc():
  2. re = []
  3. re_f = 'finally'
  4. try:
  5. re.append(1)
  6. return re
  7. 1 / 0
  8. except Exception:
  9. print('in except ')
  10. re.append(2)
  11. return re
  12. finally:
  13. print('in finally')
  14. re.append(3)
  15. return re_f
  16. print(abc())
  17. 》》》
  18. in finally
  19. finally
  20. 》》》结论: tryfinally下都有return时,执行finally下的return

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/631604
推荐阅读
相关标签
  

闽ICP备14008679号