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)
修正逻辑说明
现在程序的执行流程变成了:
- 先执行
try块的第一行:弹出工时输入框,获取输入后立刻尝试转成float。如果输入不是数字(比如'forty'),直接触发except块,输出错误并退出,不会再执行后面的时薪输入语句。 - 只有当工时输入合法并转换成功后,才会执行第二行:弹出时薪输入框,同样立刻校验转换,出错则触发异常。
这种写法既贴合「仅把可能出错的代码放在try块」的最佳实践,又完全实现了你想要的「输入非数字立刻触发错误提示」的需求。
内容的提问来源于stack exchange,提问作者Fiona Daniel
相关产品推荐
相关产品推荐

