You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python BMI计算器预定义ZeroDivisionError捕获未生效问题

问题根因
  • 计算BMI的代码执行顺序早于输入合法性校验逻辑:第一次获取用户输入的身高体重后,直接就执行了BMI除法计算,此时如果用户输入的身高为0,还没进入你写的while校验循环和异常捕获块,就会直接抛出ZeroDivisionError。
  • 异常捕获的位置完全错误:你将try-except包裹在重新输入的代码块中,而输入操作本身不会触发除法运算,所以ZeroDivisionError永远不会被你写的except块捕获。
  • 校验通过后没有重新计算BMI:即便后续用户输入了合法的数值,你打印的还是第一次输入时计算的错误BMI值,结果不符合预期。
修复后代码
def bmi_calculator():
    while True:
        try:
            user_height = float(input('请输入您的身高(单位:厘米): '))
            user_weight = float(input('请输入您的体重(单位:千克): '))
            if user_height <= 0 or user_weight <= 0:
                print("身高或体重不能小于等于0,请重新输入")
                continue
            bmi = user_weight / (user_height / 100) ** 2
            return f'您的BMI值为: {bmi}'
        except ZeroDivisionError:
            print("身高不能为0,请重新输入")

print(bmi_calculator())
修复说明
  • 用无限循环包裹整个输入+校验+计算流程,只要任意环节不合法就自动回到输入步骤
  • 把BMI计算逻辑移到合法性校验之后,确保只有合法数值才会参与计算
  • 把除法计算逻辑放到try块内,此时如果出现除零异常会被正常捕获,触发重新输入逻辑
  • 合法计算完成后直接返回结果,跳出循环,无冗余代码

内容的提问来源于stack exchange,提问作者Luka Morchiladze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:06:07