实验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     

 

       

 

posted on 2022-10-28 20:36  Mandeluda  阅读(216)  评论(0编辑  收藏  举报