异常:
1.什么是异常*****
异常时错误发生前的一种信号
如果没有人来处理这个信号 执行就会中断执行并抛出错误信息提示
2.异常的分类
1.语法检查异常:这种异常时最低级的异常(绝对不应该犯的错误)
也非常好避免:如果时编译器 会自动给提示
如果是文本编译器 在你运行代码前 解释器会自动检测语法
2.运行时异常(逻辑异常):这种异常只有在代码执行时才会被发现
我们要处理的重点就是运行时的异常
特点:在没有运行代码前是无法发现的
如果运行时异常已经发生并且没有正确处理他,就会抛出错
误信息,并且中断程序的执行。这是我们在学习异常时要解
决的问题
3.异常的组成
1.追踪信息(具体发生异常的位置,并提示异常调用顺序)
2.异常的类型(错误的类型)
3.异常的消息(详细的错误信息)
4.常见的异常
NanmeError 找不到这个名字 要么变量 要么函数
ValueError 在调用一个函数时给的值不正确
TypeError 类型错误 例如字符串与数字进行加减乘除 调用一个不能被调用的类型
ZeroDivisionError 除数不能为0
KeyError 没有这个key值
IndexError 索引不存在
StopIteration 没有更多的值可以迭代
FileNotFoundError 文件不存在
5.异常的处理*****
要处理异常
要学的就是一个新的语法
try:
这里放可能出现异常的代码
except 异常的类型
当异常发生并且匹配上类型时
执行except中的代码
注意:一旦try中又代码抛出了异常 那么之后代码都不执行
万能异常:except:Exception(这是异常的父类)
except:BaseException(Exception的父类)
except:
6.主动抛出异常
当程序中有一些限制 然而用户没有遵循 我们可以主动抛出异常
语法:
raise 异常类型(异常的详细信息)
类型必须是BaseException的子类
7.断言
可以理解为断定 就是很清楚 很明确
什么时候需要断定?
下面代码必须依赖上面代码的正确数据
语法:assert 结果为Bool的表达式‘如果True继续往下执行,反之抛出异常
a=[]
assert len(a)>0
print(a[0])
8.自定义异常
当系统提供的这些异常类型 和你要描述的错误不匹配时 就需要自定义类型
写法:
class 自定义异常类型名称(BaseException):
总结一下:之所以自定义类型 是为了更具体描述你的错误,使使用者可以直观看出
关键点:1.如何自定义异常类型
2.在except中 使用 as 来捕获异常
9.总结 使用场景
在遇到我们不知道异常在哪或者根本无法解决异常的时候使用