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

Python Try-Except块未执行异常处理,错误输入致终端无限挂起求助

代码问题排查与修复

核心问题分析

  1. 无限循环根源:convert函数的while True循环始终处理传入的同一个错误输入。比如输入cat/dog或1/0时,触发异常后pass直接回到循环开头,重复解析错误数据,永远无法退出循环,导致终端卡死。
  2. 输入逻辑缺失:main函数只执行一次input,没有在输入无效时重新提示用户输入的逻辑。
  3. gauge函数错误:最后一个分支打印固定的Z%,未动态输出传入的百分比数值。

修复后的完整代码

def main():
    while True:
        fuel = input("Fuel: ")
        try:
            c = convert(fuel)
            gauge(c)
            break  # 输入有效时退出循环
        except (ValueError, ZeroDivisionError):
            pass  # 输入无效时重新提示

def convert(fraction):
    X, Y = fraction.split("/")
    x = int(X)
    y = int(Y)
    f = x / y
    if f > 1:
        raise ValueError("分子不能大于分母")
    return int(round(f * 100))

def gauge(percentage):
    if percentage <= 1:
        print("E")
    elif percentage >= 99:
        print("F")
    else:
        print(f"{percentage}%")

if __name__ == "__main__":
    main()

修复说明

  • 输入循环移至main:把输入逻辑放到main的while True循环里,每次输入无效时重新提示用户输入,避免在convert里死循环。
  • 简化convert函数:去掉convert里的循环,把异常抛出给main处理,让职责更清晰——convert只负责有效输入的转换,输入校验和循环提示交给main。
  • 修复gauge输出:把固定的Z%改成动态的{percentage}%,正确显示百分比。
  • 增加分子校验:当输入3/2这类分子大于分母的情况时,主动抛出异常,触发重新输入。

内容的提问来源于stack exchange,提问作者python_beginner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:15:33