引发自定义异常 (Python)

Raising Custom Exceptions (Python)

提问人:hyssopofluv 提问时间:7/6/2023 更新时间:7/9/2023 访问量:86

问:

每当输入负值时,我都会尝试在代码中引发自定义异常,但我不断收到错误。我的代码是:

class LessThanZeroError(Exception):
    pass

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

        if height 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')
print(get_BMI())

这是输出屏幕截图。输出

我尝试在用户的身高或体重值小于或等于零时引发异常,但我收到错误,我不确定为什么。

python-3.x 异常

评论

1赞 MatthewMartin 7/6/2023
身高是正数时是真实的。对于任何正数高度,将执行 if 块。同样对于将来,发布错误消息的文本而不是图像,除非没有屏幕截图就无法显示错误。
0赞 hyssopofluv 7/6/2023
谢谢!并得到了它
1赞 Matiiss 7/6/2023
@Amolgorithm它既不节省内存,也不冗余,但实际上,它改进了代码的自记录方面
0赞 D.L 7/6/2023
我同意@Amolgorithm。我几乎从不发表声明。并且当函数完成时,该变量将被清除。returnBMI

答:

3赞 Andrei Evtikheev 7/6/2023 #1

和 是条件语句中的两个独立语句。如果 ,它将返回 ,因此之后将传递缩进的代码。 因此,您需要将引发异常的条件更改为heightweight < 0if...or...:height == 0True

if height < 0 or weight < 0:
3赞 404PersonNotFound 7/6/2023 #2

之所以引发错误,是因为引发异常的条件是 。对于整数,变量只要不等于 0。所以你的语句部分只要不是 0 就行了,这就是你的特殊错误被提出的原因。if height or weight < 0TrueheightifTrue

另外,您可能希望将代码行更改为 , 因为一个人没有身高或体重是没有意义的。 但是,如果您只是希望它不接受负数,那么您的代码将是:if height <= 0 or weight <= 0

if height < 0 or weight < 0: