Python 为什么我的受保护循环出错?
我有这个剧本Python 为什么我的受保护循环出错?,python,while-loop,Python,While Loop,我有这个剧本 for line in file: while line[i] == " ": if i == len(line): break i += 1 if i == len(line): pass while not line[i] == " ": if i == len(line): break obj += line[i]
for line in file:
while line[i] == " ":
if i == len(line):
break
i += 1
if i == len(line):
pass
while not line[i] == " ":
if i == len(line):
break
obj += line[i]
i += 1
print obj
到目前为止,文件
等于[“清除”,“退出”]
和i
等于0
当我运行这个脚本时,它会出现如下错误
Traceback (most recent call last):
File "/home/ubuntu/workspace/lib/source.py", line 8, in <module>
while not line[i] == " ":
IndexError: string index out of range
回溯(最近一次呼叫最后一次):
文件“/home/ubuntu/workspace/lib/source.py”,第8行,在
而不是行[i]==“”:
索引器错误:字符串索引超出范围
我很确定我的循环得到了正确的保护,在这种情况发生之前它应该会断开。如果是这种情况,那么为什么会发生这种情况呢?您的循环不是“安全的”,“中断”只会中断内部的循环,因此一旦i==len(line),它将首先退出,而停留在main for中,并且您尝试在“while not line[i]==“line”中读取行[i],这会导致您在“line”之外建立索引(因为在进入循环之前检查了条件)
我的循环受到保护
不,不是。在到达回路主体之前,必须首先评估while
上的条件,如果条件为保护
为确保i
不超过列表的长度,将中的条件移动到if
,并将其作为中的第一个条件,而:
while i < len(line) and not line[i] == " ":
obj += line[i]
i += 1
while not line[i] == " ":
obj += line[i]
i += 1
if i == len(line):
break
i
未在您的代码段中定义。请更新代码以进行演示。i
在评估条件时超出范围。pass
可能不会执行您认为的操作。编辑以包含i的值您是在试图理解您发布的代码,还是在寻找stripped\u line=line.strip()
?(请参见,以及同一页上的lstrip
和rstrip
)@KevinJ.Chase我正试图修复我的代码,因为它正在获得一个索引器,并打印obj。obj
从未打印过,修复?@bjskistad你可以将该部分插入主代码。我做了,它正在打印两个空白值。@bjskistad我同时更改了条件。检查更新是否给我索引器通过是什么意思无操作?如果条件为真,则必须进行操作。我的意思是“pass”不起任何作用,这在python中是字面上的无操作,它在任何意义上都不会影响执行。也许你的意思是“continue”?
while not line[i] == " ":
obj += line[i]
i += 1
if i == len(line):
break