Python----面向对象---try....except的详细用法

try..except...详细用法

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

 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 except NameError 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 except NameError 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 <module>
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 except NameError as e:
13     print('---->', e)
14 
15 except IndexError as e:
16     print('---->', e)
17 
18 except KeyError 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 except NameError as e:
13     print('---->', e)
14 
15 except IndexError as e:
16     print('---->', e)
17 
18 except KeyError 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 except Exception 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     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 except NameError as e:
13     print('---->', e)
14 
15 except IndexError as e:
16     print('---->', e)
17 
18 except KeyError as e:
19     print('---->', e)
20 
21 except Exception as e:
22     print('---->', e)
23 
24 
25 print('after code')
26 
27 结果为:
28 
29 ======1
30 ----> name 'name' is not defined
31 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 except NameError as e:
13     print('---->', e)
14 
15 except IndexError as e:
16     print('---->', e)
17 
18 except KeyError as e:
19     print('---->', e)
20 
21 except Exception 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 except NameError as e:
13     print('---->', e)
14 
15 except IndexError as e:
16     print('---->', e)
17 
18 except KeyError as e:
19     print('---->', e)
20 
21 except Exception 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 <module>
24 
25 444
26     print(next(f))
27 
28 StopIteration
29 555
30 final
原文地址:https://www.cnblogs.com/xudachen/p/8672352.html