不处理语法错误,处理逻辑错误(往往是数值不在有效范围而引起的)
定义:运行时检测到的错误
现象:当异常发生时,程序不会向下执行,而转到函数的调用语句(不断向上返回)
常见异常类型:
-- 名称异常(NameError):变量未定义。
-- 类型异常(TypeError):不同类型数据进行运算。
-- 索引异常(IndexError):超出索引范围。
-- 属性异常(AttributeError):对象没有对应名称的属性。
-- 键异常(KeyError):没有对应名称的键。
-- 异常基类Exception。
语法:
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
处理语句1
except 错误类型2 [as 变量2]:
处理语句2
except Exception [as 变量3](可以无论什么错误只写这一句,与只写except效果相同):
不是以上错误类型的处理语句
else:
未发生异常的语句
finally:
无论是否发生错误,一定执行的语句
作用:将程序由异常状态转为正常流程。
说明:
as 子句是用于绑定错误对象的变量,可以省略
except子句可以有一个或多个,用来捕获某种类型的错误。
else子句最多只能有一个。
finally子句最多只能有一个,如果没有except子句,必须存在。
如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。
raise 语句
作用:抛出一个错误,让程序进入异常状态。
目的:在程序调用层数较深时,向主调函数传递错误信息要层层return 比较麻烦,所以人为抛出异常,可以直接传递错误信息。