1 '''
2 异常的概念 :代码产生错误,无法继续执行
3 异常的产生
4 异常的捕获与处理
5 函数调用栈
6 自定义异常
7 '''
8 #导入模块,可以打印出报错的详细信息
9 # import traceback
10 #
11 # # 异常的产生, 解决方法:1.if 过滤(这个方法适合提前已知可能出现的bug)
12 # # 2.事后处理 :可以处理未知的异常 try: except:
13 # while True:
14 # num = input('input a num:')
15 # try:
16 # print('100 / %s = %s' % (num,100.0/int(num)))
17 # # except ZeroDivisionError:#捕获处理这种异常
18 # # print('处理方案,除数不能为0')
19 # # #打印出具体异常是什么,用as + 变量 ,然后打印出变量
20 # # except ValueError as error: # 捕获处理这种异常
21 # # print('处理方案,除数不能为非数字字符',error)
22 # #获取所有异常
23 # # except Exception:
24 # # print('有异常,但不清楚是什么异常')
25 # #简写 捕获所有异常
26 # except:
27 # print('缩写,但不清楚是什么异常')
28 # print('缩写',traceback.format_exc()) #打印出报错的详细信息 ,展示报错的行号
29
30
31 # 函数调用栈 ,异常是从下一层层往上抛的 ,f3报错,一层层都会报错,所以下面总共有4个错误
32 #自己写的代码的话,一般在最下面的那行报错就是报错的原因
33 #如果调用第三方库报错,最下面的那行报错一般不知道是什么错误,一般就看在哪里调用的第三方库的方法
34 #这种多层报错的,一般都是哪边方便加就到哪边加异常处理
35 # def f3():
36 # print("in - f3,start")
37 # b = 4/0 #这里会报错
38 # print("in - f3,end")
39 # def f2():
40 # print("in - f3,start")
41 # f3()
42 # print("in - f3,end")
43 #
44 # def f1():
45 # print("in - f3,start")
46 # f2()
47 # print("in - f3,end")
48 # f1()
49
50 #自定义异常
51 # #异常是个类,自定义的异常需要先抛出再进行捕获 ,抛出是raise
52 # class nameTooLongError(Exception):#要继承Exception这个类
53 # err = 'name.long'
54 # print('nameTooLongError')
55 # def methFun(self):
56 # pass
57 # #自定义异常类 -过短异常,继承
58 # class nameTooshortError(Exception):
59 # print('nameTooshortError')
60 #
61 # def inputName():
62 # name = input('请输入名字:')
63 # if len(name) > 10:
64 # raise nameTooLongError #自定义的异常要自行抛出
65 # elif len(name) < 10:
66 # raise nameTooshortError
67 # try:
68 # inputName()
69 # except nameTooshortError:
70 # print("您的名字过短")
71 # except nameTooLongError:
72 # print("您的名字过长")
73
74 #断言
75 tel = input('请输入手机号:')
76 assert len(tel) == 11,'手机号位数错误'
77 print('位数正确')