一、什么是异常
异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)
二、异常的分类
1、语法检测异常
解释器在执行程序时,首先检测语法,如果发现有问题,则一行代码都不会执行
2、运行时异常
已经通过语法检测,开始执行代码,但是逻辑有问题

print(123) b print(123) 检测到语法异常,不会打印123 if
三、学习的主要目的:
在异常发生时不中断程序,提高程序的健壮性
四、异常的种类
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
五、异常的组成
六、处理异常的基本语法:
语法1 单/多分支 try: 代码 except type1: except type2:

一 try: print("=======1") print("=======2") print("=======3") l = [1,2,3] l[100] # 发现IndexError,下面代码不再执行 print("======4") d = {'a':1,'b':2} d['c'] print("======5") except IndexError: print("=======6") print("=======8") ----------------------------------------------------------- =======1 =======2 =======3 =======6 =======8 二 如果此时是except Keyerror: =======1 =======2 =======3
语法2 多异常合并处理 try: except (type1, type2, ....):
语法4 多分支 + 万能异常 try: except type1: except type2: except Exception as 别名:
语法5 try+ else try: except type: else: #else必须放到后边,会在没有异常的情况下执行
语法6 try+finally try:
#f = open(“a.txt”,...) except type: finally: #无论异常是否发生,finally后的代码都会执行,一般用于资源回收
#f.close()
万能异常(不建议使用)

try: li[1] dic['age'] 方式一except: 方式二except Exception: #只执行一个except,只要发现错误,下边的将不会执行 方式三except BaseException: print('索引不对')
七、主动抛出异常raise
raise +异常类型(“给出信息”) raise TypeError("异常信息")
使用场景:需要给用户反馈信息时,比如注册登录,用户名输入数字时,抛出异常,反馈信息
一般与自定义异常连用
八、自定义异常类
当系统内置的异常类型无法准确的描述你的错误原因时,继承BaseException
lass MyException(Exception): def __init__(self,msg): super().__init__() self.msg = msg def __str__(self): #__str__ return "%s" %self.msg raise MyException("自定义的")
九、断言assert
assert 条件