什么是异常???
程序在运行过程中出现了不可预知的错误
并且该错误没有对应的处理机制,那么就会以异常的形式表现出来
造成的影响就是整个程序无法再正常运行
异常的种类:
1. 语法错误:是你程序立刻就能解决的
2. 逻辑错误:一眼看不出来,是程序启动以后出现的
针对逻辑上的错误,可以采用异常处理机制进行捕获
常见的错误类型:
NameError 名字错误
SyntaxError 语法错误
KeyError 键不存在
ValueError 值错误
IndexError 索引错误
异常的结构:
1. 异常的类型:如:NameError
2. 异常的信息:如:name 'fdsdfsdf' is not defined
3. 异常的位置:如:Traceback (most recent call last):
File "D:/python脱产10期视频/day29/01 异常处理.py", line 1, in <module>
fdsdfsdf
那么针对这些异常该如何避免呢????
# 简易模式 try: # 代码块 name # 会出现NameError错误,名字未被定义 except NameError: # 捕获NameError错误 ... # 接下来要执行的代码块
try: i = [1, 2, 3] i[4] # 会出现IndexError错误,索引值超出范围 except IndexError: ... # 接下来要执行的代码块
try: d = {'name':'jason'} d['age'] # 会出现KeyError错误,键错误 ---所以推荐字典取值时候用get,没有键的时候返回None,不会报错 except KeyError: ... # 接下来要执行的代码块
# 此外,还可以将上述合并在一起 try: name i = [1, 2, 3] i[4] d = {'name':'jason'} d['age'] except Exception/BaseException: # 万能异常,所有的异常类型都能捕获 ... # 接下来要执行的代码块
补充:
try: name i = [1,2,3] i[5] d = {'name':'zhao'} d['age'] except Exception: ... else: ... # 被检测代码没有任何异常发生,才会走else 必须在except后面 finally: ... # 无论被检测的代码是否有异常发生,都会在代码运行完毕之后执行
# 主动抛异常 # 关键词 raise a = 3 if a == 1: pass else: raise TypeError('a must be 1') Traceback (most recent call last): File "D:/代码练习/8.8/异常处理.py", line 56, in <module> raise TypeError('a must be 1') TypeError: a must be 1
# 断言 # 关键字:assert i = 90 assert i < 100 # 断言i小于100,猜对了不影响代码执行,正常往下走;但是猜错了直接报错 print('哈哈,我猜对了!') # 哈哈,我猜对了!
# 自定义异常 class MyError(BaseException): # 需要继承BaseException def __init__(self): super().__init__() def __str__(self): # return '<我自己定义的错误信息提示...>' return '< a 必须为 1 >' # 如: a = 3 if a == 1: pass else: raise MyError # __main__.MyError: < a 必须为 1 > # raise MyError('我自己定义的异常') 主动抛出异常起始就是将异常类的对象打印出来,会执行__str__方法