Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的受保护循环出错?_Python_While Loop - Fatal编程技术网

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