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
相关产品推荐
相关产品推荐

