御险篇-Day50 异常实战 Kata:给学员登记程序增加输入防护

0 次阅读 2026-10-19 15:57

📖 知识点回顾

  1. try...except:捕获运行异常,防止程序崩溃

  2. else:只有无异常时执行后续逻辑

  3. raise:主动抛出业务非法数据异常

  4. 常用异常:ValueError

业务规则:

  • 学员年龄必须是整数

  • 年龄范围:6 ~ 30

  • 姓名不能为空

⚔️ Kata 实战任务

任务需求:

  1. 准备空列表 student_list = [],用来存放学员字典

  2. 编写函数 add_student(),实现学员登记:

    • 接收输入:姓名、年龄

    • 对年龄做类型转换,捕获ValueError(输入不是数字)

    • 校验:姓名不能为空;年龄必须 6~30,不满足则raise ValueError

    • 校验全部通过,把学员字典追加进列表

  3. 使用 try-except 包裹登记逻辑,捕获异常并打印提示

  4. 登记成功后打印学员信息;失败打印错误信息

参考代码

 

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岁之间
当前学员列表: []

🧠 思考题

  1. 为什么姓名为空的判断放在 try 里面,用 raise 抛出,而不是直接用 if+print?

  2. 如果需要一次性连续登记 3 个学员,怎么改造代码?