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

Python自定义LessThanZeroError异常触发失败问题求助

问题分析与修复

你的代码有两个核心问题导致异常触发不符合预期:

  • 条件判断逻辑错误
    原代码里的if height or weight < 0:写法完全错误。Python会先判断height的布尔值(只要height不是0,就视为True),再和weight < 0的结果做或运算。这意味着哪怕height是正数,这个条件也会直接成立;反过来如果height是0,才会去判断weight是否小于0,完全不符合你“身高或体重小于0就抛异常”的需求。正确写法应该是:

    if height < 0 or weight < 0:
    
  • 自定义异常未被捕获
    你只在try块里捕获了ValueError,但抛出的LessThanZeroError没有对应的except块处理,所以当触发这个自定义异常时,程序会直接崩溃,而不是按你的预期输出提示。需要添加专门的except块来捕获并处理它。

修正后的代码
class LessThanZeroError(Exception):
    pass

def get_BMI():
    try:
        height = int(input('Enter height in inches:'))
        weight = int(input('Enter weight in pounds:'))

        # 修正条件判断逻辑
        if height < 0 or weight < 0:
           raise LessThanZeroError('height and weight must be positive values')
        BMI = (weight * 703 // height**2)
        return BMI

    except ValueError:
        print('Error, height and weight must be numbers')
    # 添加自定义异常的捕获处理
    except LessThanZeroError as e:
        print(f'Error: {e}')
        return None

print(get_BMI())

现在测试场景:输入负值时会触发自定义异常并打印对应错误信息;输入非数字时触发ValueError提示;输入正常正数则计算并返回BMI值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:17:07