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

Python:读取文件计算平均值时出现ValueError后如何继续循环迭代

问题原因

你当前代码的try...except ValueError块包裹了整个文件遍历逻辑,只要某一行转换为整数触发异常,就会直接终止整个循环,不会继续处理后续行,因此只能捕获到第一个six对应的错误,也无法累加后续的合法数值35、40。
另外你重复打开文件的冗余操作,是因为第一次打开文件读取第一行后,文件指针已经移动到文件末尾,再次遍历才需要重新打开,这部分逻辑可以直接优化。

修正方案

核心修改是将异常捕获逻辑移动到for循环内部,仅包裹单条数据的转换逻辑,这样单条数据出错只会跳过当前行,不会终止整个遍历流程。如果还没学习with文件管理语法,保留你原来的open写法也可以,只要调整异常捕获的位置即可:

def main():
    while True:
        try:
            filename = input("Enter a file name: ")
            infile = open(filename, "r")
        except IOError:
            print("[Error No. 2] No such file or directory:", filename)
            continue # 文件名错误则重新输入
        else:
            break

    total = 0
    count = 0
    # 不需要重复读取第一行,直接遍历文件即可
    for line in infile:
        try:
            num = int(line)
            print(num)
            total += num
            count += 1
        except ValueError as err:
            # 单条转换出错仅打印错误,继续处理下一行
            print(err)
    
    # 避免没有合法数值时出现除零报错
    if count > 0:
        print("The average is: ", total/count)
    else:
        print("No valid numbers in the file")

    infile.close()

main()

执行效果

运行后会依次输出合法数值25、15、5,接着打印six对应的错误信息,再打印35,接着打印one对应的错误信息,最后打印40,最终平均值为所有合法数值的平均数24.0,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:33:02