# 第 2-3 课课堂练习:异常处理 # # 请先阅读讲义并运行完整示例,再按照顺序完成练习。 # 不要删除题目、测试数据、预期结果和自查注释。 # 本练习只读取当前课程目录中的 practice_data 文件,不删除或覆盖其他文件。 # 第一部分:定义 parse_score(score_text) 函数 # 1. 参数 score_text 接收一个字符串。 # 2. 在 try 中使用 int(score_text) 转换为整数,并保存结果。 # 3. 捕获 ValueError,输出“评分必须是整数。”,然后 return None。 # 4. 转换成功后,检查评分是否处于 0 到 100 之间。 # 5. 超出范围时输出“评分必须在 0 到 100 之间。”,然后 return None。 # 6. 合法时 return 转换后的整数,不要在函数内输出合法结果。 # 7. 分别传入 "90"、"优秀"、"120",预期返回 90、None、None。 # 第二部分:定义 calculate_average(total_score, agent_count) 函数 # 1. 在 try 中计算 total_score / agent_count。 # 2. 捕获 ZeroDivisionError,输出“Agent 数量不能为 0。”并 return None。 # 3. 使用 else return 平均分。 # 4. 传入 180 和 2,预期返回 90.0。 # 5. 传入 180 和 0,预期返回 None,程序不能崩溃。 # 第三部分:定义 read_score(file_path) 函数 # 1. 在 try 中使用 read_text(encoding="utf-8") 读取文本。 # 2. 调用 strip() 清理文本,再调用 parse_score() 并 return 结果。 # 3. 捕获 FileNotFoundError,输出“没有找到评分文件。”并 return None。 # 4. 添加 finally,并输出“评分文件读取结束。”。 # 5. 注意:parse_score() 已经负责处理 ValueError,不要重复捕获同一错误。 # 第四部分:定义 main() 函数 # 1. 使用 mkdir(parents=True, exist_ok=True) 创建 PRACTICE_DIR。 # 2. 使用 write_text() 把 "90\n" 写入 SCORE_FILE,并指定 utf-8。 # 3. 调用 read_score(SCORE_FILE),把返回值保存为 saved_score。 # 4. saved_score 不是 None 时,输出“读取到的评分:90”。 # 5. 再调用 read_score(PRACTICE_DIR / "missing.txt") 测试文件不存在的分支。 # 6. 添加程序入口判断,直接运行本文件时调用 main()。 # 最终验收测试: # 1. parse_score("0") 返回 0; # 2. parse_score("100") 返回 100; # 3. parse_score("优秀") 输出提示并返回 None; # 4. parse_score("-1") 和 parse_score("101") 均返回 None; # 5. calculate_average(180, 2) 返回 90.0; # 6. calculate_average(180, 0) 不崩溃并返回 None; # 7. 存在的评分文件可以正常读取; # 8. 不存在的文件会输出提示,finally 中的文字仍然出现; # 9. 所有异常都捕获了明确类型,没有使用空白 except。 # 完成后自查: # 1. try 中是否只放可能发生异常的代码; # 2. 是否分别理解 ValueError、ZeroDivisionError 和 FileNotFoundError; # 3. 出现异常后,程序是否给出中文提示而不是直接崩溃; # 4. 是否使用 return 返回结果,而不是只在函数中 print(); # 5. 是否理解 else 只在没有异常时执行; # 6. 是否理解 finally 无论有无异常都会执行; # 7. 是否没有使用 except Exception 隐藏所有问题; # 8. 是否没有删除题目和验收说明。