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
相关产品推荐
相关产品推荐

