Python循环无法终止求助:需匹配‘end’时终止循环
帮你排查Python循环终止的问题
嘿,我来帮你揪出这段代码里的疏漏,让它能正确在读取到end时终止循环!
代码里的核心问题
- 判断对象错误:你在while循环里判断的是外层for循环的
line(也就是包含config system global的那一行),根本不是刚用rf.__next__()读取的新行,这就导致永远触发不了break逻辑! - 未处理文件末尾异常:直接调用
rf.__next__()如果读到文件末尾,会抛出StopIteration异常,程序直接崩溃,没有做异常捕获。 - 匹配条件太严苛:用
'end\n'来判断,万一配置里的end后面没有换行符,或者带了空格(比如end),就匹配不到了,容错性太差。
修正后的代码
def y(): with open('test.conf', 'r') as rf: x = list() for line in rf: if 'config system global' in line: x.append(line) # 直接用读取到的line,避免重复写死换行符 try: while True: current_line = rf.__next__() x.append(current_line) # 去掉空白字符后判断是否为'end',容错性更强 if current_line.strip() == 'end': break except StopIteration: # 读到文件末尾就终止,避免崩溃 break with open('test.txt', 'w') as wf: wf.writelines(x)
修正点说明
- 把
rf.__next__()读取的新行存到current_line变量,判断时用这个变量,确保是当前读取的内容。 - 用
try-except捕获StopIteration异常,防止读到文件末尾程序崩溃。 - 用
current_line.strip() == 'end'替代原有的判断,不管行尾有没有换行、空格都能正确匹配。 - 原代码里手动写
'config system global\n'改成直接用读取到的line,避免原文件里这行有其他空白时出现不一致。
内容的提问来源于stack exchange,提问作者DaShield
相关产品推荐
相关产品推荐

