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