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

如何判断下一行缩进量大于当前行?Python文本处理求助

解决文本行遍历中的无限循环与索引错误问题

我来帮你搞定这个踩坑的问题!你的代码现在遇到的无限循环和索引错误,主要是因为迭代器混用和边界判断缺失导致的,咱们一步步理清楚并修正。

先说说你的代码问题出在哪

  • 迭代器混用混乱:你用enumerate生成了一个迭代器lines,然后同时在for循环里自动遍历,又在while里手动调用lines.__next__(),这会彻底打乱迭代器的内部状态,导致循环逻辑乱套,很容易触发无限循环。
  • 索引越界没处理:当处理最后一个YYYY时,textList[i+1]会直接超出列表的索引范围,自然就抛出索引错误了。

修正后的代码方案

咱们换一种更清晰的索引控制方式,避免迭代器的坑,同时做好边界判断:

def getIndentLevel(line):
    # 计算当前行的缩进空格数
    return len(line) - len(line.lstrip(' '))

textList = ["XXXX", "XXXX", "XXXX", "YYYY", " ZZZZ", " ZZZZ", "YYYY", " ZZZZ", " ZZZZ"]

i = 0
while i < len(textList):
    current_line = textList[i]
    # 判断当前行是否是YYYY(忽略缩进)
    if current_line.lstrip(' ') == "YYYY":
        print("YYYY found")
        cur_indent = getIndentLevel(current_line)
        # 从下一行开始遍历子元素
        j = i + 1
        # 确保j不超出列表范围
        while j < len(textList):
            next_line = textList[j]
            next_indent = getIndentLevel(next_line)
            # 缩进不大于当前YYYY的缩进,就停止遍历子元素
            if next_indent <= cur_indent:
                break
            print(j, next_line)
            j += 1
        # 直接跳到当前YYYY块的末尾,避免重复处理
        i = j
    else:
        # 不是YYYY,就往下走一行
        i += 1

代码逻辑解释

  • 用while循环+手动控制索引i,完全掌控遍历节奏,不会出现迭代器混乱的问题。
  • 处理YYYY时,用单独的索引j来遍历后续子行,每次先检查j是否在列表范围内,从根源避免索引越界。
  • 处理完当前YYYY的所有子行后,把i直接设为j,跳过已经处理过的子行,既高效又不会重复处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:08:14