赞
踩
- try:
- print('可能出现异常的代码')
- except (Error1, Error2, Error3, ...) as e:
- print('处理异常的代码')
- except Exception:
- print('处理异常的代码')
-
- #Error: 异常类型,一个except代码块可以同时处理多种异常类型
- #Exception : 表示所有异常类型,一般用在最后一个except块中
- try:
- print(ss)
- except (ZeroDivisionError, NameError) as e:
- print('出现了除0错误和访问未声明变量错误中的一种')
- except:
- print('其他错误类型')
- else:
- print('没有异常时执行')
- try:
- print(ss)
- except Exception as e:
- print('出现了除0错误和访问未声明变量错误中的一种')
- finally:
- print('无论是否异常都会走的到此处')
finally可以结合try...except
,try...except...else
使用,也可以仅有try
和finally
。
1. 一定要避免在finally中编写return,raise等会终止函数的语句。
- import traceback
-
- try:
- 1/0
- except:
- print(traceback.print_exc()) #打印报错详细堆栈信息
3.1 情况1
- def abc():
- re = []
- re_f = 'finally'
- try:
- re.append(1)
- return re
- 1 / 0
- except Exception:
- print('in except ')
- re.append(2)
- return re
- finally:
- print('in finally')
- re.append(3)
- #return re_f
-
- print(abc())
-
- 》》in finally
- 》》[1, 3]
- 》》 结论:try下面有return时,需要执行finally再执行try下的reutrn
-
3.2 情况2
- def abc():
- re = []
- re_f = 'finally'
- try:
- re.append(1)
- 1 / 0
- except Exception:
- print('in except ')
- re.append(2)
- return re
- finally:
- print('in finally')
- re.append(3)
- #return re_f
-
- print(abc())
-
- 》》》
- in except
- in finally
- [1, 2, 3]
- 》》》
- 结论:except下有return时,会先执行finally中的语句再执行except中的return
3.3 情况3
- def abc():
- re = []
- re_f = 'finally'
- try:
- re.append(1)
- return re
- 1 / 0
- except Exception:
- print('in except ')
- re.append(2)
- return re
- finally:
- print('in finally')
- re.append(3)
- return re_f
-
- print(abc())
-
- 》》》
- in finally
- finally
-
- 》》》结论: try和finally下都有return时,执行finally下的return
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。