异常处理
一、异常处理
""" 1、什么是异常 异常是错误发生的信号,一旦程序出错就会产生一个异常 如果该异常没有被处理,该异常就会被抛出来,程序的运行随即终止 异常是由三部分组成 1、具体哪一行代码抛出的异常 2、异常的种类 NameError:变量名没有定义过 IndexError:索引不存在 l=[11,22] l[100] KeyError d={"k1":11} d["k2"] AttributeError:对象属性不存在 对象.属性 ValueError: int("asdf") TypeError: "asdf"+1111 ZeroDivisionError 1/0 3、异常的内容信息 2、为何要处理异常 为了增强程序的健壮性 3、如何处理异常 1、针对语法的错误:应该在程序运行前立即改正 2、针对逻辑错误: 2.1 如果逻辑错误发生的条件是可以预知的,应该if判断解决,预防异常 age = input('>>: ').strip() if age.isdigit(): age=int(age) if age > 18: print('too big') elif age < 18: print('too small') else: print("got it") else: print('必须输入数字') 2.2 如果逻辑错误发生的条件是不可预知的,那么异常一个会发生,考虑到程序的健壮性 我们应该处理异常,做好补救措施 try: 代码块 except 异常的类型: 发生异常后要执行的代码 """ # 例1 # try: # print("====>111") # print("====>222") # xxx # print("====>333") # except AttributeError as e: # print(e) # # print('====>4') # 例2 # try: # print("====>111") # print("====>222") # xxx # print("====>333") # except NameError as e: # print(e) # # print('====>4') # # 例3 # try: # print("====>111") # print("====>222") # # xxx # # l=[] # # l[0] # dic={} # dic["k1"] # print("====>333") # except (NameError,IndexError) as e: # print("=---->",e) # except KeyError as e: # print(e) # # print('====>4') # # 例4 # try: # print("====>111") # print("====>222") # xxx=111 # # l=[] # # l[0] # dic={} # # dic["k1"] # print("====>333") # except (NameError,IndexError) as e: # print("=---->",e) # except KeyError as e: # print(e) # finally: # print("一定会运行") # print('====>4') # # print(xxx) # # 例4 # try: # print("====>111") # print("====>222") # finally: # print("一定会运行") # print('====>4') # # print(xxx) # # 例5 # try: # print("====>111") # print("====>222") # # xxx # l=[] # # l[0] # dic={} # dic["k1"] # print("====>333") # except Exception as e: # print("万能异常",e) # print('====>4') # 例6 # print('==>11') # raise NameError("变量名未定义") # print('==>222') # class Animal: # def speak(self): # raise BaseException("小垃圾必须实现speak方法来覆盖") # # def run(self): # raise BaseException("小垃圾必须实现run方法来覆盖") # # # class Dog(Animal): # pass # # class Pig(Animal): # pass # # # d=Dog() # p=Pig() # # d.speak() # d.run() # p.speak() # d.run() # 例7 # class Interface(BaseException): # def __init__(self, msg, x, y, z): # self.msg = msg # self.x = x # self.y = y # self.z = z # # def __str__(self): # return "<%s:%s:%s:%s>" % (self.msg,self.x,self.y,self.z) # # # raise Interface("接口异常", 11, 22, 33) # 例8: print("====1") print("====2") print("====3") salaries=[1.1,2.2] # if len(salaries) != 3: # raise NameError assert len(salaries) == 3 print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2]) print(salaries[2])