Python中如何多次处理ValueError异常实现BMI计算器输入循环校验
BMI计算器输入循环校验修复方案
你现有代码的核心问题如下:
- 自定义的
error_handeling函数中weight为局部变量,函数外部无法读取,且该函数仅做了1次异常捕获,用户第二次输入非浮点值仍会触发ValueError报错 - 体重、身高的数值范围校验逻辑没有嵌套异常捕获,输入非数字内容时程序直接崩溃
- 体重的校验逻辑和异常捕获逻辑拆分,导致逻辑冗余,你写的
if False: break是无效代码不会执行 - 原BMI判断逻辑存在漏洞:大于18.5就判定为超重不符合通用标准,正常BMI区间应为18.5≤BMI<24
修复后的完整可运行代码如下:
# 通用校验函数:获取符合范围要求的浮点型输入 def get_valid_float(prompt, min_val, max_val, range_error_msg): while True: try: input_val = float(input(prompt)) if min_val <= input_val <= max_val: return input_val else: print(range_error_msg) except ValueError: print("输入格式错误,请输入数字") # 获取合法体重:范围2KG~200KG weight = get_valid_float("请输入你的体重(单位:KG):", 2, 200, "体重不合法,请输入2~200之间的数值") # 获取合法身高:范围0.5米~2.2米 height = get_valid_float("请输入你的身高(单位:米):", 0.5, 2.2, "身高不合法,请输入0.5~2.2之间的数值") BMI = weight / (height ** 2) print(f"你的BMI值为:{BMI:.2f}") if BMI < 18.5: print("你体重偏轻,建议适当增加营养摄入!") elif 18.5 <= BMI < 24: print("你的体重处于正常范围,继续保持!") elif 24 <= BMI < 28: print("你属于超重范围,建议适当控制饮食、增加运动!") else: print("你属于肥胖范围,建议调整饮食结构,坚持规律运动!")
修复逻辑说明:
- 封装了通用的输入校验函数,把异常捕获和数值范围校验合并到同一个死循环里,只要输入不合法就一直要求重新输入,直到拿到符合要求的值才返回
- 修复了原BMI的判断逻辑,符合国内通用的成人BMI判定标准
- 消除了冗余无效代码,逻辑复用性更高,后续如果需要增加其他数值输入校验,直接调用
get_valid_float函数即可
内容的提问来源于stack exchange,提问作者kimanxo 313
相关产品推荐
相关产品推荐

