1 """
2 异常
3 """
4 """
5 1.异常基类:Exception
6 2.常见的异常有:NameError 名称 SyntaxError 语法错误 IndexError 索引
7 KeyError 键 FileNotFoundError 文件未找到 AttributeError 对象属性异常
8 TypeError 类型
9 """
10 # print(a) # NameError: name 'a' is not defined
11 # print(2/0) # ZeroDivisionError: division by zero
12 # for i in range(5) # SyntaxError: invalid syntax
13 # list_1 = [1,2,3]
14 # print(list_1[3]) # IndexError: list index out of range
15 # dict_1 = {1:"a",2:"b"}
16 # print(dict_1[3]) # KeyError: 3
17 # fire = open("1111.txt","r") # FileNotFoundError: [Errno 2] No such file or directory: '1111.txt'
18 # class Car(object):
19 # def __init__(self,color):
20 # self.color = color
21 #
22 # car = Car("black")
23 # print(car.color)
24 # print(car.name) # AttributeError: 'Car' object has no attribute 'name'
25 # print(1+"1") # TypeError: unsupported operand type(s) for +: 'int' and 'str'
26 """
27 捕获并处理异常:
28 try-except 语句定义了监控异常的一段代码,并提供了处理异常的机制
29 语法格式:
30 try:
31 代码块1
32 except:
33 异常处理代码
34 """
35 # 处理一个异常
36 # try:
37 # # print(a)
38 # # content = open("111.txt")
39 # for i in "abc":
40 # print(i)
41 # except: # 当try语句中发生了异常,才会执行except
42 # print("捕获到了异常信息")
43 #
44 # print("程序执行结束")
45
46 # 处理多个异常
47 # try:
48 # num_1 = int(input("请输入一个数字"))
49 # num_2 = int(input("请输入另一个数字"))
50 # print(num_1/num_2)
51 # # except ZeroDivisionError:
52 # # print("除数不能为0")
53 # # except ValueError:
54 # # print("请输入正确的数字")
55 # except (ZeroDivisionError, ValueError): # 同时捕获多个异常,写在元组中
56 # print("捕获到了异常信息")
57
58 """
59 捕获描述信息:as
60 当出现多种异常,为了区分不同的错误信息,可以使用as获取系统反馈的信息
61 """
62 """
63 捕获所有异常,使用Exception
64 Exception 是所有异常类的基类
65 """
66 """
67 没有捕获到异常(else)
68 如果try语句没有捕获到任何的错误信息,
69 就不再执行任何except语句,而是会执行else语句。
70 """
71 # try:
72 # num_1 = int(input("请输入一个数字"))
73 # num_2 = int(input("请输入另一个数字"))
74 # print(num_1/num_2)
75 # # # except ZeroDivisionError:
76 # # # print("除数不能为0")
77 # # # except ValueError:
78 # # # print("请输入正确的数字")
79 # # except (ZeroDivisionError, ValueError) as result: # 将异常的描述信息赋值给result
80 # # print("捕获到了异常信息,%s" % result)
81 # except Exception as result:
82 # print("捕获到了异常信息,%s" % result)
83 """
84 finally 终止行为
85 在程序中,无论是否捕捉到异常,都必须要执行某件事情,
86 例如关闭文件、释放锁等,这时可以提供finally语句处理。
87 通常情况下,finally用于释放资源
88 """
89 # import time # 导入时间模块
90 # try:
91 # f = open("/untitled/b.txt","r")
92 # content = f.read()
93 # while True:
94 # if len(content) == 0:
95 # break
96 # time.sleep(5)
97 # print(content)
98 # break
99 # finally:
100 # f.close()
101 # print("文件已被关闭")
102 # print(f.closed)
103
104 """
105 Python中异常处理完整语句:
106 try:
107 代码块
108 except Exception as result:
109 异常描述信息
110 except:
111 异常信息
112 else:
113 没有出现异常时执行的语句
114 finally:
115 最后执行的语句,有无异常都会执行,用于释放资源
116 (如果这些语句都出现要按照上述顺序来写)
117 (注意:else必须与except连用,没有except就不能有else)
118 (finally可以只与try一起使用)
119 """
120 """
121 抛出异常:raise
122 使用raise语句能显示地触发异常,格式如下:
123 1.raise 异常类名 --> 引发指定异常类的实例
124 2.raise 异常类对象 --> 引发指定异常类的实例
125 3.raise --> 重新引发刚刚发生的异常
126 4.raise 指定异常的描述信息
127 5.异常引发异常:使用raise...from…可以在异常中抛出另外的异常
128 """
129 # 1.使用类名触发异常
130 # num = int(input("请输入一个人数字"))
131 # if num < 0:
132 # raise IndexError
133 # print("12345")
134
135 # 2.使用异常类的实例(对象)引发异常
136 # a = IndexError() # 创建了一个索引异常类的实例对象
137 # num = int(input("请输入一个人数字"))
138 # if num < 0:
139 # raise a
140 # print("12345")
141
142 # 3.raise 引发刚刚发生的异常,将异常向外传递
143 # try:
144 # print(a)
145 # except:
146 # print("程序出现异常")
147 # raise
148 # print("123")
149
150 # 4.raise 指定异常的描述信息
151 # num = int(input("请输入一个人数字"))
152 # if num < 0:
153 # raise IndexError("索引下标超出了范围")
154 # print("12345")
155
156 # 5.使用raise...from…可以在异常中抛出另外的异常
157 # try:
158 # print(a)
159 # except Exception as result:
160 # print("捕获到了异常%s" % result)
161 # raise IndexError ("下标超出范围") from result
162
163 """
164 assert语句又称作断言(判断完条件后不满足则发言),指的是期望用户满足指定的条件。
165 当用户定义的约束条件不满足的时候,
166 它会触发AssertionError异常,
167 所以assert语句可以当做条件式的raise语句。
168
169 语法格式:assert 逻辑表达式,data
170 相当于:if not 逻辑表达式:
171 raise AssertionError(data)
172
173 assert 后面紧跟一个逻辑表达式,相当于条件。
174 Data通常是一个字符串,当条件为false时作为异常的描述信息。
175 """
176 # age = int(input("请输入您的年龄"))
177 # assert age >= 18,"您还不能进入网吧,因为年龄太小,回家学习去吧"
178
179 # 等价于以下代码:
180 # age = int(input("请输入您的年龄"))
181 # if age < 18:
182 # raise AssertionError("您还不能进入网吧,因为年龄太小,回家学习去吧")
183
184 # 求两个最大公约数
185 # while True:
186 # try:
187 # num_1 = int(input())
188 """
189 自定义异常,继承自Exception的子类
190 """
191 # 自定义异常:用户密码,长度至少三位
192 # class ShortInputError(Exception): # 定义了一个基于Exception的异常类
193 # def __init__(self,len,shortLen):
194 # self.len = len
195 # self.shotLen = shortLen
196 #
197 # try:
198 # text = input("请输入密码,长度至少三位")
199 # if len(text) < 3:
200 # raise ShortInputError(len(text),3) # 引发自定义的异常类并传入相对应的参数
201 # print("密码是",text)
202 # except ShortInputError as result:
203 # print("程序运行错误!您的密码长度是%d,"
204 # "长度至少应该是%d位" % (len(text),3),result)
205
206 # 自定义异常:年龄必须要大于0,否则报错
207 # 方式1:
208 # age = input("请输入您的年龄")
209 #
210 # class Age(Exception):
211 # def __init__(self,age):
212 # self.age = age
213 #
214 # try:
215 # text = int(input("请输入你的年龄"))
216 # if text > 0:
217 # raise ShortInputError(1)
218 # print("年龄大于0,")
219
220 # age = int(input("请输入您的年龄"))
221 # if age <= 0:
222 # raise AssertionError("您的年龄输入必须要大于等于0岁")
223
224
225 # 方法2:assert
226 # age = int(input("请输入您的年龄"))
227 # assert age > 0,"年龄必须要大于0岁"
228 # print(age)
229
230 # 方法3:
231 # class AgeNotZerro(Exception):
232 # def __init__(self,age):
233 # self.age = age
234 # def __str__(self): # 对象的字符串定制显示,作为异常的描述信息返回
235 # return "年龄必须大于0岁"
236 #
237 # age = int(input("请输入您的年龄"))
238 # if age < 0:
239 # raise AgeNotZerro(age)
240 """
241 with语句适用于对资源进行访问的场合,
242 确保不管使用过程中是否发生异常都会
243 执行必要的“清理”操作,释放资源。
244 wich...as...环境安装器
245 """
246 # 打开文件,确保会关闭。方法1:
247 # try:
248 # file = open("b.txt")
249 # content = file.read()
250 # print(content)
251 # except Exception as result:
252 # print("捕获到异常",result)
253 # finally:
254 # file.close()
255
256 # 打开文件确保关闭,方法2:wich...as...
257 # with open("b.txt") as file:
258 # content = file.read()
259 # print(content)
260 #
261 # print(file.closed)
262
263 """
264 课后练习题解析
265 """
266 # 处理多个异常
267 # try:
268 # # print(a)
269 # 1 + "1"
270 # # except NameError:
271 # # print("捕获到异常,名称错误")
272 # # except TypeError:
273 # # print("捕获到异常,类型错误")
274 # # except (NameError,TypeError): # 捕获多个异常,元组形式包裹
275 # # print("捕获到异常")
276 # except (NameError,TypeError) as result: # 捕获多个异常,并获取其描述信息
277 # print("捕获到异常",result)
278
279 # raise NameError
280
281 # age = 10
282 # assert age >=18,"年龄大于等于18岁才能进入网吧"
283
284 # try:
285 # print(a)
286 # except:
287 # print("捕获到异常")
288 # raise
来源:https://www.cnblogs.com/zh1127487137/p/12552867.html