紧凑形式的二分支结构第一次见到,很惊奇,还能这么用
顺序应该这么来
异常就是报错,因此我们可以使用俩个关键字try 和 except 把异常的语句放到try:后面,出现异常就执行except后面的代码,否则跳过except
注意如果标明了异常的类型,那么这个异常就只响应它这个异常
可以理解为我们首先去执行语句块1的一部分代码,如果它不发生异常,我们奖励性的执行语句块三,如果发生了异常就去执行语句块2,无论发不发生异常都会执行语句块4
height,weight=eval(input("请输入身高(米)和体重(公斤)[逗号隔开]:"))
bmi=weight/pow(height,2)
print("BMI 数值为:{0:.2f}".format(bmi))
who,nat="",""
if bmi < 18.5:who, nat = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:who, nat = "正常", "正常"
elif 24 <= bmi < 25:who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:who, nat = "偏胖", "肥胖"
else:who, nat = "肥胖", "肥胖"
print("BMI 指标为:国际'{0}', 国内'{1}'".format(who, nat))
我们可以将之前做的异常与这个实例结合在一起
当,输入框输入的是一个数的时候向外抛出异常
python try 异常处理(史上最全) - 知乎 (zhihu.com)
但这样抛异常的有个问题,它只能执行一次,因此我们可以换一种方式
引入retry库即能实现,重复抛异常
而retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试。
详见python retrying 模块 - 知乎 (zhihu.com)
注意的一点,异常要用函数定义的方式,使用方式就是@retry标记一下就可以了
#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2023/3/21 21:25
# @File : BMI身体质量.py
from retrying import retry
@retry
def ex():height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]:"))bmi = weight / pow(height, 2)print("BMI 数值为:{0:.2f}".format(bmi))who, nat = "", ""if bmi < 18.5:who, nat = "偏瘦", "偏瘦"elif 18.5 <= bmi < 24:who, nat = "正常", "正常"elif 24 <= bmi < 25:who, nat = "正常", "偏胖"elif 25 <= bmi < 28:who, nat = "偏胖", "偏胖"elif 28 <= bmi < 30:who, nat = "偏胖", "肥胖"else:who, nat = "肥胖", "肥胖"print("BMI 指标为:国际'{0}', 国内'{1}'".format(who, nat))raise
ex()