📖 知识点回顾
try...except:捕获运行异常,防止程序崩溃else:只有无异常时执行后续逻辑raise:主动抛出业务非法数据异常常用异常:
ValueError
业务规则:
学员年龄必须是整数
年龄范围:6 ~ 30
姓名不能为空
⚔️ Kata 实战任务
任务需求:
准备空列表
student_list = [],用来存放学员字典编写函数
add_student(),实现学员登记:接收输入:姓名、年龄
对年龄做类型转换,捕获
ValueError(输入不是数字)校验:姓名不能为空;年龄必须 6~30,不满足则
raise ValueError校验全部通过,把学员字典追加进列表
使用 try-except 包裹登记逻辑,捕获异常并打印提示
登记成功后打印学员信息;失败打印错误信息
参考代码
student_list = []
def add_student():
name = input("请输入学员姓名:").strip()
age_str = input("请输入学员年龄:").strip()
try:
age = int(age_str)
# 业务规则校验,不满足主动抛异常
if len(name) == 0:
raise ValueError("姓名不能为空")
if not (6 <= age <= 30):
raise ValueError("年龄必须在6~30岁之间")
except ValueError as e:
print("❌ 登记失败:", e)
else:
# 全部校验成功,存入列表
student = {"name": name, "age": age}
student_list.append(student)
print("✅ 学员登记成功!", student)
# 调用测试
add_student()
print("当前学员列表:", student_list)
测试示例 1(正常)
请输入学员姓名:小明
请输入学员年龄:16
✅ 学员登记成功! {'name': '小明', 'age': 16}
当前学员列表: [{'name': '小明', 'age': 16}]
测试示例 2(年龄输入 abc)
请输入学员姓名:小红
请输入学员年龄:abc
❌ 登记失败: invalid literal for int() with base 10: 'abc'
当前学员列表: []
测试示例 3(年龄超出范围)
请输入学员姓名:小刚
请输入学员年龄:50
❌ 登记失败: 年龄必须在6~30岁之间
当前学员列表: []
🧠 思考题
为什么姓名为空的判断放在 try 里面,用 raise 抛出,而不是直接用 if+print?
如果需要一次性连续登记 3 个学员,怎么改造代码?
行者孙Python