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

Python使用next()读文件报StopIteration错误的解决方法

错误原因

StopIteration是迭代器遍历到末尾、没有更多可返回内容时抛出的异常,你在第一次调用next(inputfile)时就触发这个错误,核心原因只有一个:你代码打开的bendin.txt文件对象里没有任何可读内容。
常见触发场景:

  • 你存放测试用例的bendin.txt和代码运行时的工作目录不匹配,代码实际打开的是另一个位置的空同名文件——注意Python用相对路径打开文件时,是相对于运行代码时的终端工作目录,不是相对于代码文件本身的存放目录
  • 你在进入with块之前,已经对inputfile做过读操作(比如调试时加过read()类的代码没删掉),文件指针已经被移到了文件末尾,后续next自然读不到内容
  • 你编辑完测试输入文件后没有保存,磁盘上的bendin.txt还是空文件

另外你当前的文件打开写法不规范:先手动open再把文件对象传入with块,容易出现文件句柄泄漏、指针位置异常的问题,输出文件outputfile也没有被上下文管理器托管,写完内容可能因为没正常关闭导致数据丢失。

排查&修复方案
  1. 先确认文件路径是否正确,在with块第一行加如下代码,打印当前打开文件的绝对路径和全部内容,定位到实际打开的文件:
import os
print("当前打开的文件路径:", os.path.abspath(inputfile.name))
print("文件全部内容:", repr(inputfile.read()))
inputfile.seek(0) # 读完所有内容后把指针重置回文件开头,不影响后续读行

如果打印出来的内容是空的,顺着打印的路径找到对应文件,把测试用例写进去保存,或者直接在open时传入测试文件的绝对路径即可。

  1. 改用规范的上下文管理器写法,把open操作直接放在with行,由上下文管理器自动处理两个文件的打开、关闭逻辑,修正后的完整文件读取代码如下:
import cmath as m

# 同时托管输入、输出两个文件的生命周期,自动关闭释放资源
with open("bendin.txt", "r", encoding="utf-8") as inputfile, open("bendout.txt", "w", encoding="utf-8") as outputfile:
    R1 = next(inputfile).strip().split()
    R1x1BL = int(R1[0])
    R1y1BL = int(R1[1])
    R1x2TR = int(R1[2])
    R1y2TR = int(R1[3])
    
    R2 = next(inputfile).strip().split()
    R2x1BL = int(R2[0])
    R2y1BL = int(R2[1])
    R2x2TR = int(R2[2])
    R2y2TR = int(R2[3])

# 后续补充矩形重叠面积计算逻辑即可

补充说明:给open加上encoding="utf-8"参数是为了避免不同系统默认编码不一致导致的读文件乱码问题,读行时加strip()是为了去掉每行首尾的换行符、空格,避免split时出现空字符串的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:15:27