九、异常处理
1.什么是异常
#异常是错误发生的信号,一旦程序出错,就会产生一个异常,应用程序未处理该异常异常便会抛出,程序随之终止
2.异常信息三部分
#1.追踪信息 #2.异常的类型 #3.异常的值
3.常见的异常类型
##3.1语法错误应该在程序运行前修正 if 1 >2 #少一个:冒号 结果:SyntaxError: invalid syntax print ('sss') ##3.2 逻辑错误 x #结果:NameError: name 'x' is not defined l=[] #结果:IndexError: list index out of range l[10000] class Foo: pass Foo.x #结果:AttributeError: type object 'Foo' has no attribute 'x' k={'x':1} k['y'] #结果:KeyError:'y' for i in 3: #结果TypeError:'int' object is not iterable pass str1='a' int(str1) #ValueError:invalid literal for int() with base 10:'a'
4.如何处理异常
#基本格式 print ('===start===') try: l=[] l[1000]=10 print ('hello') except IndexError: pass print ('===end===') #输出异常值 print ('===start===') try: l=[] l[1000]=10 print ('hello') except IndexError as e: #e为异常的值 print (e) print ('===end===') #Exception print ('===start===') try: l=[] l[1000]=10 print ('hello') except Exception as e: #万能匹配异常 print ('万能异常--》'e) print ('===end===') #匹配多个异常值,try里面代码块,只执行一次异常处理expect print ('===start===') try: l=[] l[1000]=10 print ('hello') d={} d['a'] except IndexError as e: print (e) except KeyError as e: print (e) print ('===end===') #else print ('===start===') try: print ('hello') except Exception as e: print (e) else: print ('没有异常触发') print ('===end===') #finally print ('===start===') try: print ('hello') except Exception as e: print (e) finally: print ('不管有没有异常都触发') print ('===end===') # #raise stus=[] if len(stus) ==0: raise TypeError #主动触发TypeError类型异常 for i in stus: print (i) ##assert stus=[] assert len(stus) !=0 #断言成功继续执行,断言失败报AssertionError错误 for i in stus: print (i)
#自定义异常 class MyException(BaseException): def __init__(self,msg): super(MyException,self).__init__() self.msg=msg def __str__(self): return '<%s>'%self.msg raise MyException('类型错误') 结果: Traceback (most recent call last): File "D:/practice_ATM/AMT1/day08.py", line 41, in <module> raise MyException('类型错误') __main__.MyException: <类型错误>
5.什么情况下使用异常处理
#在无法预测即将发生的事时,可以使用异常判断预防