Files
PythonLearn/02_python进阶/2_3_异常处理/practice.py

59 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 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. 是否没有删除题目和验收说明。