能否在同一条if语句中同时检测异常与输入分值小于0的情况
考试成绩平均分计算合法性校验方案
答案是可以实现,你可以通过封装校验函数的方式,把输入转换异常捕获、数值范围校验的逻辑都收拢到函数中,最终在同一条if语句内完成所有校验逻辑,优化后的实现代码如下:
def get_valid_score(prompt): try: score = float(input(prompt)) # 同时完成数值范围校验,返回校验结果和分数值 return (score >= 0, score) except ValueError: # 捕获非数值输入的异常,返回校验失败 return (False, 0) while True: valid1, score1 = get_valid_score('Enter your 1st score: ') valid2, score2 = get_valid_score('Enter your 2nd score: ') # 同一条if语句完成两个分数的所有合法性校验 if not (valid1 and valid2): print('Invalid value, try again...') continue print(f'Your average is {(score1 + score2) / 2}') break
方案说明
- 封装的
get_valid_score函数内部完成了输入读取、非数值输入的异常捕获、分数大于等于0的合法性校验三个逻辑,只要任意一个环节不满足就会返回校验失败的结果 - 主逻辑中的if语句会同时判断两个分数的校验状态,只要有一个分数校验不通过就会触发重试提示,完全符合你的需求
- 相比原有代码中使用的无差别
except,这里指定捕获ValueError更规范,不会误捕获程序运行中的其他异常(比如键盘中断信号)
内容的提问来源于stack exchange,提问作者OHarry
相关产品推荐
相关产品推荐

