异常
1.定义:运行时检测到的错误。
2.现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句。
3.常见异常类型:
-- 名称异常(NameError):变量未定义。
-- 类型异常(TypeError):不同类型数据进行运算。
-- 索引异常(IndexError):超出索引范围。
-- 属性异常(AttributeError):对象没有对应名称的属性。
-- 键异常(KeyError):没有对应名称的键。
-- 未实现异常(NotImplementedError):尚未实现的方法。
-- 模块异常(ImportError):无法引入模块或包
-- 输入输出异常(IOErroe):输入输出异常
-- 语法异常(SyntaxError Python):代码逻辑语法出错,不能执行
-- 异常基类Exception
处理
1.语法:
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
处理语句1
except 错误类型2 [as 变量2]:
处理语句2
except Exception [as 变量3]:
不是以上错误类型的处理语句
else:
未发生异常的语句
finally:
无论是否发生异常的语句
2.作用:将程序由异常状态转为正常流程。
3.说明:
as 子句是用于绑定错误对象的变量,可以省略
except子句可以有一个或多个,用来捕获某种类型的错误。
else子句最多只能有一个。
finally子句最多只能有一个,如果没有except子句,必须存在。
如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。
1 def div_apple(apple_count): 2 """ 3 分苹果 4 """ 5 # ValueError 6 person_count = int(input("请输入人数:")) 7 # ZeroDivisionError 8 result = apple_count / person_count 9 print("每人分到%d个苹果" % result) 10 11 12 try: 13 div_apple(10) 14 15 except ValueError: 16 print("输入的数据应该是整数") 17 except ZeroDivisionError: 18 print("分母不能是0") 19 except Exception: 20 print("未知错误") 21 else: 22 # 没有异常时执行 23 print("分苹果成功喽")
#请输入人数:0 #分母不能是0 #请输入人数:a #输入的数据应该是整数 #请输入人数:3.5 #输入的数据应该是整数 #请输入人数:2 #每人分到5个苹果 #分苹果成功喽
raise 语句
1.作用:抛出一个错误,让程序进入异常状态。
2.目的:在程序调用层数较深时,向主调函数传递错误信息要层层return 比较麻烦,所以人为抛出异常,可以直接传递错误信息。。
自定义异常
1. 定义:
class 类名Error(Exception):
def __init__(self,参数):
super().__init__(参数)
self.数据 = 参数
2.调用:
try:
….
raise 自定义异常类名(参数)
….
except 定义异常类 as 变量名:
变量名.数据
3.作用:封装错误信息
练习:定义函数,在控制台中获取成绩(1--100),如果输入有误,请重新输入.
1 def get_score(): 2 while True: 3 str_score = input("请输入成绩:") 4 try: 5 int_score = int(str_score) 6 except ValueError: 7 continue 8 if 1<=int_score<=100: 9 return int_score 10 11 print(get_score())