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

Python try/except异常处理问题及代码优化咨询

问题原因分析

你的问题出在输入获取的时机上:原代码里的两个input()调用是在try块之外执行的。这意味着不管你第一个输入的工时是不是有效数字,程序都会先把「工时」和「时薪」的输入全部收集完毕,才会进入try块去做类型转换。所以当你输入'forty'后,程序还是会先弹出时薪的输入框,直到两个输入都拿到手,才会在转换工时的时候触发异常。

符合要求的修正方案

按照你的要求——仅保留两行类型转换相关语句在try块里,我们可以把input()调用直接嵌入到float()转换的语句中,这样就能实现「输入一个校验一个,出错立刻终止」的效果:

try:
    fh = float(input("Enter hours:"))
    fr = float(input("Enter Rate:"))
except:
    print('Error, please enter numeric input')
    quit()
print(fh, fr)
if fh > 40:
    reg = fr * fh
    otp = (fh - 40.0) * (fr * 0.5)
    xp = reg + otp
else:
    xp = fh * fr
print("Pay:",xp)
修正逻辑说明

现在程序的执行流程变成了:

  1. 先执行try块的第一行:弹出工时输入框,获取输入后立刻尝试转成float。如果输入不是数字(比如'forty'),直接触发except块,输出错误并退出,不会再执行后面的时薪输入语句。
  2. 只有当工时输入合法并转换成功后,才会执行第二行:弹出时薪输入框,同样立刻校验转换,出错则触发异常。

这种写法既贴合「仅把可能出错的代码放在try块」的最佳实践,又完全实现了你想要的「输入非数字立刻触发错误提示」的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:27:26