You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 16:54:04