【Python打卡2019】20190420之计算BMR-异常处理

0.在上一次计算BMR程序的基础上,加上异常处理;

目的是解决用户的非正常输入。

1.Python异常处理

与Java类似,使用tryexceptfinally语句;
try包含的语句是可能出现错误的程序片段
except跟着可能出现的异常,包含的是捕捉到对应异常的处理片段
finally包含的是无论是否出现异常都注定执行的内容
程序代码:

"""
    --计算BMR,人体代谢率指数
    --一行输入所有结果,然后带单位输出
    --格式化输出+字符串分割
    ++增加异常处理!!!
"""

def cal_BMR(gender, height, weight, age):
    """
        计算BMR函数
        BMR:基础代谢率
    """
    bmr = -1
    if gender == '男':
        bmr = weight*13.7+height*5.0-age*6.8+6
    elif gender == '女':
        bmr = weight*9.6+height*1.8-age*4.7+655

    return bmr

if __name__ == '__main__':
    continue_cal = 'y'
    while(continue_cal=='y'):
        str_all_info = input("请输入以下信息(并以空格分隔):性别(男/女)、体重(kg)、身高(cm)、年龄:")
        # 将字符串分割
        list_info = str_all_info.split(" ")
        # 可能出现非正常输入的无法转换
        try:
            gender = list_info[0]
            weight = eval(list_info[1])
            height = eval(list_info[2])
            age = eval(list_info[3])
            bmr = cal_BMR(gender, height, weight, age)
            # 格式化输出
            print("您的性别为:{},体重为:{}kg,身高为:{}cm,年龄为:{}岁".format(gender, weight, height, age))
            print("基础代谢率:{}大卡".format(bmr))
        except ValueError:
            print("请重新输入正确的数据~")
        except IndexError:
            print("输入的值不全,请重新输入~")
        except NameError:
            print("请重新输入正确的数据~")
        except:
            print("程序异常!请重新输入~")
        finally:
            continue_cal = input('是否继续,继续则y,否则n')

运行结果:

Y:\Python\Anaconda\python.exe Y:/PythonWorkspace/lect04/CalBMR4.py
请输入以下信息(并以空格分隔):性别(男/女)、体重(kg)、身高(cm)、年龄:男 七十 一米七 二十三
请重新输入正确的数据~
是否继续,继续则y,否则nn

Process finished with exit code 0

2.课后习题

正确表述:

  • 程序运行之前可以检测语法错误;
  • 异常发生在运行期间;
  • 异常有很多种类型;

错误表述:

  • 在程序运行之前可以检测异常

异常对应:
ValueError:向内置函数中输入了一个类型正确值不正确的对象
KeyError:字典中找不到某个键;
输入对象类型有误;
序列下标超出了范围。

猜你喜欢

转载自blog.csdn.net/qq_32760017/article/details/89419918