Python新手求助:多条件校验全部通过才执行else分支的实现问题
联系信息校验代码修改方案
原代码核心问题
- 所有校验逻辑为独立
if判断,即便前面已经触发错误,后续代码依然会执行,比如输入字段数量不足4项时,继续按索引取data_user的值会直接抛出索引越界异常 - 末尾的
else仅和最后一个if age>100判断绑定,只要年龄≤100就会执行正常打印,哪怕前面其他校验已经报错,完全不符合需求
修改思路
- 新增校验状态标记位,初始值为
True,只要任意一条校验规则触发错误,就将标记位设为False - 输入字段数量校验失败时直接终止后续取值逻辑,避免索引报错
- 所有校验逻辑执行完成后,仅当标记位为
True(即全部校验通过)时,才执行正常信息打印
修改后完整代码
from datetime import datetime data_user = input("请输入联系信息,按空格分隔(名字 姓氏 出生年份 10位手机号码):").split(" ") # 初始化校验状态 is_valid = True if len(data_user) != 4: print("错误:输入顺序错误、存在遗漏项或输入不合法") is_valid = False else: first_name = data_user[0] last_name = data_user[1] phone_number = data_user[2] # 补充出生年份数字校验,避免非数字输入报错 if not data_user[3].isnumeric(): print("错误:出生年份必须为数字") is_valid = False else: birth = int(data_user[3]) # 各项字段校验 if first_name.isnumeric(): print("错误:名字只能包含字母") is_valid = False if last_name.isnumeric(): print("错误:姓氏只能包含字母") is_valid = False if len(phone_number) != 10: print("错误:手机号码必须为10位") is_valid = False if phone_number[0] != "0": print("错误:手机号码首位必须为0") is_valid = False if not phone_number.isnumeric(): print("错误:手机号码必须为数字") is_valid = False age = datetime.now().year - birth if age < 18 or age > 100: print("错误:出生年份不符合要求") is_valid = False # 仅全部校验通过时打印正常信息 if is_valid: print(f"姓名:{first_name} {last_name}\n电话:{phone_number}\n出生年份:{birth}")
改动说明
- 补充了出生年份的数字校验,避免用户输入非数字年份时直接抛出类型转换异常
- 嵌套了字段取值逻辑,只有输入字段数符合要求时才会继续后续校验,避免索引越界
- 所有错误触发时都会将校验状态标记为无效,最终只有状态为有效时才会打印正常结果
内容的提问来源于stack exchange,提问作者Lior Ben ishai
相关产品推荐
相关产品推荐

