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

Python初学者遭遇List Index Out of Range错误求助

问题分析与修复

错误原因

  1. 索引越界:外层循环条件i < len(words) - 1会漏掉最后一个单词,且内层循环中i持续递增,当i等于len(words)时,访问words[i]必然触发IndexError。同时内层循环未检查i是否仍在列表范围内,即使外层有条件,也挡不住i超出上限。
  2. 长度计算逻辑错误:原代码中size += len(words[i]) + len(phrase_tuple) - 1完全错误,len(phrase_tuple)是结果列表的元素个数,和当前行的长度毫无关系,导致行长度计算完全偏离预期。
  3. 循环逻辑冗余:外层循环的else块中额外执行i += 1,会跳过内层循环已经处理过的单词,导致部分单词丢失。

修复后的代码

def corta_texto(phrase, maxlength):
    words = phrase.split()
    phrase_tuple = []
    phrase_line = ''
    i = 0

    while i < len(words):
        # 计算加入当前单词后的总长度:非空行需额外加一个空格
        next_length = len(phrase_line) + len(words[i]) + (1 if phrase_line else 0)
        if next_length <= maxlength:
            # 当前单词可以加入行
            if phrase_line:
                phrase_line += ' '
            phrase_line += words[i]
            i += 1
        else:
            # 当前行已满,存入结果并重置
            phrase_tuple.append(phrase_line)
            phrase_line = ''
    # 处理最后一行剩余内容
    if phrase_line:
        phrase_tuple.append(phrase_line)
    
    return phrase_tuple

修复说明

  • 外层循环改为i < len(words),确保所有单词都被处理,不会遗漏最后一个。
  • 直接用len(phrase_line)跟踪当前行长度,替换原错误的size变量,计算加入单词后的长度时,考虑非空行需要添加空格的情况。
  • 移除冗余的i += 1操作,只有当单词成功加入当前行时才递增索引,避免跳过单词。
  • 循环结束后主动检查并加入最后一行剩余内容,防止丢失未完成的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:05:25