12异常

旧时模样 提交于 2020-03-23 16:51:24
  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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!