Python分支条件执行异常?如何实现非法输入时的重复问询逻辑
输入错误自动重试的实现方法
要实现“用户输错非数字内容时自动重新提问”的效果,只需要把单次输入、格式校验的逻辑放进带退出条件的循环里就行,不需要额外写复杂的分支判断。
具体实现要点:
- 用
while True构造无限循环,把提问、格式校验的流程全部包裹在循环内部 - 在
try块内完成“读取用户输入—转成浮点数”的全流程,一旦转换失败就进入异常处理分支,循环不会退出 - 不要写没有指定异常类型的裸
except:,只捕获ValueError——这是字符串转数字失败时抛出的专属异常,避免把用户按Ctrl+C强制退出程序这类正常操作也误判成输入错误 - 只有当输入成功转成合法数字、完成所有房价档位提示后,再执行
break跳出循环,进入后续的储蓄月数计算逻辑
修正后的完整可运行代码:
#This program calculates how many months it will take to buy my dream home print("Welcome to the dream home calculator.") while True: raw_input = input("To start, please write down the cost of your dream home. Use only numbers, and do not use commas.\n") try: # 直接把转换后的结果赋值给total_cost,规避之前遇到的“调用了float()但没存结果”的问题 total_cost = float(raw_input) except ValueError: print("Please enter only a number, with no commas.") # 转换失败直接跳过后续步骤,回到循环开头重新提问 continue # 输入合法,执行房价档位提示 if total_cost > 1000000: print("That's quite a pricey home!") elif total_cost >= 200000: print("That's a decently-priced home.") else: print("Are you sure you entered an actual home value in the Bay area?") # 所有校验完成,跳出循环进入后续计算 break # 后续计算储蓄所需月数的逻辑可以直接写在这下面
几个容易踩的细节提醒:
- 这个结构已经默认规避了之前遇到的“字符串和数字直接比较导致报错”的问题——因为只有当字符串成功转成浮点数后,才会进入后面的房价大小判断环节,不会出现类型不匹配的问题
- 如果后续需要校验输入的房价不能是负数、不能为0这类离谱值,只需要在
break之前加对应的判断逻辑就行:如果数值不符合要求就打印提示,不执行break,程序自然会回到循环开头重新提问
内容的提问来源于stack exchange,提问作者David KT
相关产品推荐
相关产品推荐

