Python数值统计程序输入done触发Invalid input错误原因排查
问题根因
- 执行顺序错误:当前代码先尝试将输入内容转int,再判断是否为"done"。输入"done"时转int必然抛出异常,直接触发except分支打印
Invalid input,不会走到后续的done判断逻辑。 - 异常场景变量未处理:转int失败时,变量n不会被赋值,后续判断
n == 'done'本身就会触发变量未定义的潜在错误。 - 统计逻辑错误:所有有效输入的数字没有被累计存储,仅保留了最后一次的输入值,且总和、计数变量初始化为None,做加法运算会直接报错,循环遍历
[n]的逻辑也完全无法累计所有输入的统计值。
修正后代码
# 初始化统计变量 total = 0 count = 0 while True: number = input('Enter a number: ') # 先判断是否结束输入 if number == 'done': break # 再尝试转数字做异常处理 try: n = int(number) except: print('Invalid input') continue # 有效输入则累计统计值 total += n count += 1 # 输出结果,加非空判断避免除以0报错 if count == 0: print('无有效数字输入') else: avg = total / count print(total) print(count) print(avg)
逻辑说明
- 优先判断输入是否为"done",匹配直接跳出循环,不会走转数字的逻辑,避免触发不必要的异常。
- 非done的输入再尝试转int,转换失败打印错误提示后直接进入下一轮循环,不参与统计。
- 有效输入的数字实时累加到总和、计数变量中,不需要额外循环统计。
- 新增无有效输入的兼容逻辑,避免0次输入时出现除以0的报错。
内容的提问来源于stack exchange,提问作者Tara
相关产品推荐
相关产品推荐

