python的try和except用法_Python----面向对象---try....except的详细用法

try..except...详细用法

1、如果一段代码有多种类型的错误,例如:

1 try:2 print('======1')3 name4 print('======2')5 l = [1, 2, 3]6 l[100]7 print('======3')8 d ={}9 d['name']10 print('======4')11

12 exceptNameError as e:13 print('---->', e)14

15 结果为:16

17 ======1

18 ----> name 'name' is not defined

定制什么类型异常,能捕获相应的异常,但是没有指定的异常的话还是会报错的,

1 try:2 print('======1')3 #name

4 print('======2')5 l = [1, 2, 3]6 l[100]7 print('======3')8 d ={}9 d['name']10 print('======4')11

12 exceptNameError as e:13 print('---->', e)14

15 结果为:16

17 ======1

18 Traceback (most recent call last):19 ======2

20 File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/33 try...except详细用法.py", line 8, in

21 l[100]22 IndexError: list index out of range

这样的话,能不能写多个except呢,答案是可以的,这就是异常的多分支

1 try:2 print('======1')3 #name

4 print('======2')5 l = [1, 2, 3]6 #l[100]

7 print('======3')8 d ={}9 d['name']10 print('======4')11

12 exceptNameError as e:13 print('---->', e)14

15 exceptIndexError as e:16 print('---->', e)17

18 exceptKeyError as e:19 print('---->', e)20

21 结果为:22

23 ======1

24 ======2

25 ======3

26 ----> 'name'

这样就能捕获多种类型的异常,

多分支:被检测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑

1 try:2 print('======1')3 #name

4 print('======2')5 l = [1, 2, 3]6 #l[100]

7 print('======3')8 d ={}9 d['name']10 print('======4')11

12 exceptNameError as e:13 print('---->', e)14

15 exceptIndexError as e:16 print('---->', e)17

18 exceptKeyError as e:19 print('---->', e)20

21 print('after code')22

23 结果为:24

25 ======1

26 ======2

27 ======3

28 ----> 'name'

29 after code

捕获异常后的代码会正常执行,

万能异常:Exception ,被检测的代码块抛出的异常有多种可能性,并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用Exception,

1 try:2 print('======1')3 #name

4 print('======2')5 l = [1, 2, 3]6 #l[100]

7 print('======3')8 d ={}9 d['name']10 print('======4')11

12 exceptException as e:13 print('---->', e)14

15

16 print('after code')17

18 结果为:19

20 ======1

21 ======2

22 ======3

23 ----> 'name'

24 after code

当然,万能异常也可以和定制异常混合使用,除了我们关心的异常使用定制异常,其它的异常类型我们使用万能异常

代码示例如下:

1 try:2 print('======1')3 name4 print('======2')5 l = [1, 2, 3]6 l[100]7 print('======3')8 d ={}9 d['name']10 print('======4')11

12 exceptNameError as e:13 print('---->', e)14

15 exceptIndexError as e:16 print('---->', e)17

18 exceptKeyError as e:19 print('---->', e)20

21 exceptException as e:22 print('---->', e)23

24

25 print('after code')26

27 结果为:28

29 ======1

30 ----> name 'name' is notdefined31 after code

还可以在except后加else判断语句,该语句会在被检测的代码块没有发生异常时执行

如:

1 try:2 print('======1')3 #name

4 print('======2')5 l = [1, 2, 3]6 #l[100]

7 print('======3')8 d ={}9 #d['name']

10 print('======4')11

12 exceptNameError as e:13 print('---->', e)14

15 exceptIndexError as e:16 print('---->', e)17

18 exceptKeyError as e:19 print('---->', e)20

21 exceptException as e:22 print('---->', e)23

24 else:25 print('在被检测代码块没有发生异常时执行')26

27

28 print('after code')29

30 结果为:31

32 ======1

33 ======2

34 ======3

35 ======4

36 在被检测代码块没有发生异常时执行37 after code

加finally语句,不管被检测的代码块有没有发生异常都会执行

1 try:2 print('======1')3 #name

4 print('======2')5 l = [1, 2, 3]6 #l[100]

7 print('======3')8 d ={}9 d['name']10 print('======4')11

12 exceptNameError as e:13 print('---->', e)14

15 exceptIndexError as e:16 print('---->', e)17

18 exceptKeyError as e:19 print('---->', e)20

21 exceptException as e:22 print('---->', e)23

24 else:25 print('在被检测代码块没有发生异常时执行')26

27 finally:28 print('不管被检测的代码块有没有发生异常都会执行')29

30

31 print('after code')32

33 结果为:34

35

36 ======1

37 ======2

38 ======3

39 ----> 'name'

40 不管被检测的代码块有没有发生异常都会执行41 after code

finally的代码应用案例:

1 try:2 f = open('a.txt')3 print(next(f))4 print(next(f))5 print(next(f))6 print(next(f))7 print(next(f))8 print(next(f))9 print(next(f))10

11 finally:12 print('final')13 f.close()14

15 结果为:16

17 111

18 Traceback (most recent call last):19

20 222

21

22 333

23 File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/33 try...except详细用法.py", line 42, in

24

25 444

26 print(next(f))27

28 StopIteration29 555

30 final

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值