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

Python处理TXT文件触发IndexError: string index out of range问题排查

解决你的Python自动标注脚本IndexError问题

嘿,我一眼就揪出问题啦!你碰到的IndexError: string index out of range完全是因为一个逻辑小失误,咱们来拆解清楚:

错误根源

你本来想检查上一行是否为空,结果代码里写了z = i[position-1]——这里的i是当前遍历到的行字符串,position-1是上一行的索引,你这相当于去取当前行字符串的第position-1个字符!比如当position是5的时候,你要取当前行的第4个字符,要是当前行是空字符串或者长度不足5,直接就触发索引越界了。而且这根本不是你要的逻辑,你应该从原行列表y里取上一行的内容,不是当前行的某个字符!

修正后的完整代码

我还帮你优化了几个细节(比如用with语句安全管理文件,避免漏加正常行):

def add_paragraph_tags(file_path):
    final_list = []
    # 用with语句自动关闭文件,比直接open更安全可靠
    with open(file_path, 'r', encoding='utf8', errors='ignore') as file:
        file_content = file.read()
    lines = file_content.split("\n")
    
    for idx, current_line in enumerate(lines):
        if idx == 0:
            final_list.append(current_line)
        else:
            # 正确获取上一行内容:从原列表lines里取索引为idx-1的元素
            previous_line = lines[idx-1]
            # 用strip()判断更严谨,能识别全是空格/制表符的空行
            if previous_line.strip() == '':
                final_list.append(f"<p>{current_line}")
            else:
                # 别忘了上一行非空时,也要把当前行加入列表,不然会丢内容!
                final_list.append(current_line)
    return final_list

额外优化说明

  • 原来的代码只处理了上一行是空的情况,漏掉了上一行非空的行,导致最终列表缺失内容,现在补充了else分支;
  • 用strip()判断空行比直接== ''更实用,能过滤掉那些看起来是空但实际有空格/制表符的行;
  • 用f-string拼接字符串比"<p>"+current_line更简洁易读。

你可以拿一段测试文本试试,比如:

开头行

新段落第一行
同段落第二行

又一个段落

运行后会得到符合预期的结果:

['开头行', '', '<p>新段落第一行', '同段落第二行', '', '<p>又一个段落']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:55:14