实验9:异常处理及程序调试
一、实验目的和要求
1、了解代码异常知识;
2、掌握异常处理的try…except语句、try…except…else语句、try…except…finally语句。raise语句;
3、掌握程序调试的方法。
二、实验环境
软件版本:Python 3.10 64_bit
三、实验过程
1、实例01:模拟幼儿园分苹果
(1)在IDLE中创建一个名称为division_apple.py的文件,然后在该文件中定义一个模拟分苹果的函数division(),在该函数中,要求输入苹果的数量和小朋友的数量,然后应用除法算式计算分配结果,最后调用division()函数,代码如下:
1 def division(): 2 '''功能:分苹果''' 3 print("\n===================== 分苹果了 =====================\n") 4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量 5 children = int(input("请输入来了几个小朋友:")) 6 result = apple // children #/除法,有余数 //除法,向下取整 #用变量名计算要注意数据类型 7 remain = apple - result * children #计算余下几个苹果 8 if remain > 0: 9 print(apple,"个苹果,平均分给",children,"个小朋友,每人分", 10 result,"个,剩下",remain,"个。") 11 else: 12 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。") 13 if __name__ == '__main__': 14 division() #调用分苹果的函数
(2)运行结果:
1.输入苹果和小朋友数量都是10时,运行结果如下:
2.当小朋友数目为0时,抛出异常:
2、实例02:模拟幼儿园分苹果(除数不能为0)
(1)在IDLE中创建一个名称为division_apple_0.py的文件,然后将实例01的代码全部复制到该文件中,并且对“if__name__=='__name__':”,语句下面的代码进行修改,应用try…except语句捕获执行division()函数可能抛出的ZeroDivisionError(除数为零)异常,修改后的代码如下:
1 def division(): 2 '''功能:分苹果''' 3 print("\n===================== 分苹果了 =====================\n") 4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量 5 children = int(input("请输入来了几个小朋友:")) 6 result = apple // children 7 remain = apple - result * children 8 if remain > 0: 9 print(apple,"个苹果,平均分给",children,"个小朋友,每人分", 10 result,"个,剩下",remain,"个。") 11 else: 12 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。") 13 if __name__=='__main__': 14 try: #捕获异常 15 division() #调用division()函数 16 except ZeroDivisionError: #处理异常语句 17 print("\n出错了 ~-~—苹果不能被0个小朋友平分!")
(2)运行结果:
1.当输入的小朋友数量为0时,不再抛出异常:
2.当输入的苹果数量不是整数时(有人分到的苹果不是整数):
3、实例03:模拟幼儿园分苹果(每个人至少分到一个苹果)
(1)在IDLE中创建一个名称为division_apple_1.py的文件,然后将实例02的代码全部复制到该文件中,并且在第5行代码“children = int(input("请输入来了几个小朋友:"))”的下方添加一个if语句,实现当苹果的数量小于小朋友的数量时,应用raise语句抛出一个ValueError异常,接下来再在最后一行语句的下方添加except语句处理ValueError异常,修改后的代码如下:
1 def division(): 2 '''功能:分苹果''' 3 print("\n===================== 分苹果了 =====================\n") 4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量 5 children = int(input("请输入来了几个小朋友:")) 6 if apple < children: #苹果不够分,抛出异常语句 7 raise ValueError("苹果太少了,不够分…") 8 result = apple // children 9 remain = apple - result * children 10 if remain > 0: 11 print(apple,"个苹果,平均分给",children,"个小朋友,每人分", 12 result,"个,剩下",remain,"个。") 13 else: 14 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。") 15 if __name__=='__main__': 16 try: #捕获异常 17 division() #调用division()函数 18 except ZeroDivisionError: #处理异常语句 19 print("\n出错了 ~-~—苹果不能被0个小朋友平分!") 20 except ValueError as e: 21 print("\n出错了 ~-~—",e)
(2)运行结果如下(输出苹果的数量为5,小朋友的数量为10):
4、实例04:模拟幼儿园分苹果(应用断言调试)
(1)在IDLE中创建一个名称为division_apple_dug.py的文件,然后将实例01的代码全部复制到该文件中,并且在第5行代码“children = int(input("请输入来了几个小朋友:"))”的下方添加一个assert语句,验证苹果的数量是否小于小朋友的数量,修改后的代码如下:
1 def division(): 2 '''功能:分苹果''' 3 print("\n===================== 分苹果了 =====================\n") 4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量 5 children = int(input("请输入来了几个小朋友:")) 6 assert apple >= children ,"苹果不够分" #应用断言调试 7 result = apple // children 8 remain = apple - result * children 9 if remain > 0: 10 print(apple,"个苹果,平均分给",children,"个小朋友,每人分", 11 result,"个,剩下",remain,"个。") 12 else: 13 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。") 14 if __name__=='__main__': 15 division() #调用division()函数
(2)运行结果如下:
1.输入苹果数量为5,小朋友数量为10:
2.将assert语句和异常处理语句结合使用,可将第15行修改为以下内容(运行结果如下):
1 try: 2 division() #调用division()函数 3 except AssertionError as e: #处理AssertionError异常 4 print("\n输入有误:",e) 5