一、实验目的
(1)try-except-else语句
(2)finally语句
(3)断言语句
(4)异常抛出
二、实验环境
联网计算机一台/每人,内装Windows 7以上操作系统和安装Python 3.7集成开发环境IDLE。
三、实验内容
Sy6-1
从键盘输入一个整数,求100除以它的商,并显示输出。要求对从键盘输入的数值进行异常处理(不能出现除数为0)
Sy6-2
编程实现索引超出范围异常index Error类型,对一个序列的索引值进行判断,如果超出则报错
Sy6-3
录入一个学生的成绩,把该学生的成绩转化为A优秀、B良好、C合格、D不及格的形式,最后将该学生的成绩打印出来。要求使用assert 断言处理分数不合理的情况
四、实验步骤与结果
1. 新建文件夹并命名为学号-姓名-实验六。
2. 安装 Python 解释器Python 3.7 集成开发环境IDLE,并进入IDLE。
3. 依次输入自己编好的程序实验内容1-7的源程序,分别命名为sy6_1.py - sy6_3.py 并保存至已建好的文件夹中。
4. 检查已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。
5. 运行程序并分析运行结果是否合理。在运行时要注意当输入不同的数据时所得结果是否正确,应测试两组以上数据,分别检查在不同情况下结果是否正确。
列出1-3题源程序清单并记录上机运行结果。
Sy6-1
从键盘输入一个整数,求100除以它的商,并显示输出。要求对从键盘输入的数值进行异常处理(不能出现除数为0)
try:
n=int(input("请输入一个整数:"))
x=100/n
print(x)
except ValueError:
print("异常,请重新输入:")
Sy6-2
编程实现索引超出范围异常index Error类型,对一个序列的索引值进行判断,如果超出则报错
try:
chars=["a","b",100,-37,2]
chars[5]="k"
except IndexError:
print("异常,超出检索范围")
Sy6-3
录入一个学生的成绩,把该学生的成绩转化为A优秀、B良好、C合格、D不及格的形式,最后将该学生的成绩打印出来。要求使用assert 断言处理分数不合理的情况
try:
score=int(input("请输入学生的成绩"))
assert 0<=score<=100
if score>=90:
print("A优秀")
if score>=80 and score<90:
print("B良好")
if score>=60 and score<80:
print("C合格")
if score<60:
print("D不合格")
except ValueError:
print("异常,输入必须为整数")
except AssertionError:
print("异常,输入的成绩不在0-100范围内")
五、总结
1. 实验过程中的问题及解决方法:
- 在处理除数不能为 0 的异常时,可能最初没有正确使用异常捕获语句导致程序崩溃。通过使用 try-except 结构,成功捕获并处理了除数为 0 的异常情况,使程序能够给出相应的提示信息并继续正常运行。
- 在实现索引超出范围异常时,可能对序列的长度判断不准确,导致异常处理不准确。通过仔细计算序列的有效索引范围,并在访问索引前进行判断,解决了索引超出范围的问题。
- 在处理学生成绩断言时,可能对断言条件设置不当,导致误判或漏判。通过仔细分析成绩的合理范围,并设置准确的断言条件,确保了不合理成绩能够被正确捕获。
2. 实验收获
- 深入理解了异常处理的重要性和工作原理,能够有效地捕获和处理各种可能出现的异常情况,提高程序的健壮性和稳定性。
- 熟练掌握了 try-except 语句的使用方法,能够针对不同类型的异常进行有针对性的处理,提供友好的错误提示信息。
- 学会了如何自定义异常,以及如何在特定情况下抛出和处理自定义异常,增强了对程序流程的控制能力。
- 对断言(assert)的使用有了更清晰的认识,能够在程序中有效地进行前置条件的检查和验证,提高代码的可靠性。
- 提升了对程序逻辑的严谨性和容错性的考虑,能够更好地预测和处理各种可能的错误情况,编写更加可靠和高质量的代码。