如何判断下一行缩进量大于当前行?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
相关产品推荐
相关产品推荐

