异常处理
什么是异常?
程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来,并造成的影响就是整个程序无法再正常运行。
异常的结构
1.异常的类型:NAMEERROR
2.异常的信息:name 'fasada' is not defined
3.异常的位置:Traceback (most recent call last): File "D:/python学习笔记总结/day29/异常处理.py", line 1, in <module>
异常的种类(两大类)
1.语法错误:是你程序立刻就能解决的,这种错误不能被容忍,语法上的错误发现之后应该立马解决。
2.逻辑错误:这种错误时可以被容忍的,因为一眼看不出来,针对逻辑上的错误,可以采用异常处理机制进行捕获。
常见的错误类型
NAMERROR :名字错误
SyntaxError :语法错误
KeyError :键不存在
ValueError :值错误
IdexError :索引错误
如果避免异常处理
在你认为可能会出现bug的代码上方try一下:注意try内部的代码块越少越好
try:
可能出错的代码
except 出错的类型 as e : #将报错信息赋值给变量e
出错之后的处理机制
try :
name
l = [1,2,3]
l[111]
d = {'name':'jason'}
d['password']
except NameError:
print('名字错误')
except IndexError:
print('索引错误')
except KeyError:
print('键不存在')
"""
错误发生之后,会立刻停止代码的运行,执行except语句,比对错误类型
"""
万能异常捕获
try :
name
l = [1,2,3]
l[111]
d = {'name':'jason'}
d['password']
except BaseException: # 万能异常,所有的异常类型都被捕获
print('老子天下无敌')
#finally
try :
name
l = [1,2,3]
l[111]
d = {'name':'jason'}
d['password']
except BaseException:
print('老子天下无敌')
else:
print('被检测的代码没有任何的异常发生,才会走else')
finally:
print('无论代码有内有异常发生,都会在代码运行完毕后执行我')
断言
l = [1,2,3]
assert len(l) < 0 # 断言 预言
#猜某个数据的状态,猜对了,不影响代码执行,正常走
#猜错了 直接报错
自定义异常
class MyError(BaseException):
def __init__(self,msg):
super().__init__()
self.msg =msg
def __str__(self):
return '<sadsaadas%sdaada>' % self.msg
raise MyError('我自己定义的异常') # 主动抛出异常就是将异常类的对象打印出来,会走__str__方法