Python学习之路(十八):基础知识之异常处理

异常就是导致代码无法正常运行的错误。

1.异常出现的原因

(1)当运用代码处理的问题不确定时;

(2)当从外部接口导入文件进行处理时;

(3)多行异常出现的原因:在嵌套调用时内部出现了问题,因而在外部调用时会逐层显示错误信息。

2.异常处理的结构

(1)分支结构

 1 l = ['login', 'register']
 2 for num, i in enumerate(l, 1):
 3     print(num, i)
 4 try:
 5     num = int(input('num>>>'))  # 当输入的值非数值时报错
 6 except ValueError:  # 当输入的值非数值时报错ValueError
 7     print('请输入数字!')
 8 try:
 9     print(l[num - 1])
10 except IndexError:  # 只能处理一种异常
11     print('输入的数字超过范围!')

(2)多分枝合并

1 l = ['login', 'register']
2 for num, i in enumerate(l, 1):
3     print(num, i)
4 try:
5     num = int(input('num>>>'))
6     print(l[num - 1])
7 except (ValueError, IndexError):
8     print('您输入的内容不合法!')

(3)万能异常

 1 def buy():
 2     print('订货')
 3     1/0
 4 def return_goods():
 5     print('退货')
 6     []
 7 def check():
 8     print('查看订单')
 9     {}
10 def main():
11     l = [('订货', buy), ('退货', return_goods), ('查看订单', check)]
12     while True:
13         for num, i in enumerate(l, 1):
14             print(num, i[0])
15 
16         num = int(input('num>>>'))
17         print(l[num - 1])
18         try:
19             func = l[num - 1][1]
20             func()
21         except Exception as e:  # 将错误信息传给e
22             print(e)
23             print(e.args, e.__traceback__.tb_lineno, e.__traceback__.tb_frame)
24             # 通过e可以调用查看错误的详细信息
25             print('用户在操作%s时产生错误' % l[num - 1][0])
26 main()

(4)万能异常结合分支结构

 1 def buy():
 2     print('订货')
 3     1/0
 4 def return_goods():
 5     print('退货')
 6     []
 7 def check():
 8     print('查看订单')
 9     {}
10 def main():
11     l = [('订货', buy), ('退货', return_goods), ('查看订单', check)]
12     while True:
13         for num, i in enumerate(l, 1):
14             print(num, i[0])
15         try:
16             num = int(input('num>>>'))
17             print(l[num - 1])
18             func = l[num - 1][1]
19             func()
20         except (ValueError, IndexError):  # 当输入出现这两种错误时打印输入内容不合法
21             print('您输入的内容不合法!')
22         except Exception as e:  # 万能异常捕捉应该放在分支后面执行
23             print(e)
24             # print(e.args, e.__traceback__.tb_lineno, e.__traceback__.tb_frame)
25             # 通过e可以调用查看错误的详细信息
26             print('用户在操作%s时产生错误' % l[num - 1][0])
27 main()

(5)else分支

 1 try:
 2     print('aaa')
 3     name
 4     [][1]
 5 except NameError:
 6     print('name error')
 7 except IndexError:
 8     print('index error')
 9 else:  # 当try中的代码不发生异常时执行else分支
10     print('else')

(6)finally分支

 1 def func():
 2     f = open('file')
 3     try:
 4         while True:
 5             for line in f:
 6                 if line.startswith('a'):
 7                     return line
 8     except:
 9         print('有异常')
10     finally:  # 即使return,也会先执行finally中的语句,再执行return
11         f.close()  # 即使报错,也会先执行finally中的语句
12 # finally用于回收一些操作系统的资源:数据库连接,打开的文件句柄,网络连接

(7)主动抛出异常

raise ValueError('你输入有误')

(8)断言-语法

1 assert 1==2  # 只能接受一个布尔值

相当于if语句

1 if 1 == int(input()):
2     pass
3 else:
4     raise AssertionError

猜你喜欢

转载自www.cnblogs.com/Studying-Du/p/12459340.html