gpt4 book ai didi

python - While 循环 - 字符串索引超出范围?

转载 作者:行者123 更新时间:2023-11-30 22:57:21 26 4
gpt4 key购买 nike

我正在使用以下语法在 Python 中运行 while 循环:

while not endFound:
if file[fileIndex] == ';':
current = current + ';'
contents.append(current)
if fileIndex == lengthOfFile:
endFound = True
else:
current = current + file[fileIndex]
fileIndex = fileIndex + 1

我的控制台中出现此错误:

var(vari) = 0;terminal.write(vari);var(contents) = file.getContents('source.py');if(vari : 0) {    terminal.write('vari equals 0');}
Traceback (most recent call last):
File "/home/ubuntu/workspace/source.py", line 30, in <module>
splitFile(content)
File "/home/ubuntu/workspace/source.py", line 22, in splitFile
if file[fileIndex] == ';':
IndexError: string index out of range

> Process exited with code: 1

发生了什么?

最佳答案

我假设您在开始之前有类似的情况:

file = "section_1;section_2;section_3;"
lengthOfFile = len(file)
contents = []
current = ""
fileIndex = 0
endFound = False

您编写的代码可以稍微澄清如下:

while not endFound:
next_char = file[fileIndex]
current = current + next_char
if next_char == ';':
contents.append(current)
#? current = ''
if fileIndex == lengthOfFile:
endFound = True
fileIndex = fileIndex + 1

这种特殊情况下的问题是,当您到达 file 中的最后一个 ; 时,fileIndex 为 17,但 lengthOfFile 是 18。因此 fileIndex == lengthOfFile 测试失败。您可以通过将此行更改为 fileIndex + 1 == lengthOfFile 或将增量操作移至 if next_char == ';' 上方来修复上面的代码。

但是有更简单的方法可以用 Python 编写此代码。特别是,如果您的目标是让 contents 成为所有“section_n;”的列表file 中的条目,您可以使用如下内容:

contents = [part + ';' for part in file[:-1].split(';')]

([:-1] 在分割之前省略了 file 中的最后一个字符 (;)。)请注意,如果这是如果您想要什么,那么您的原始代码还需要在每次传递期间重置 current 的值,如上所述。

如果您确实希望 contents 成为从 file 开头开始越来越长的子字符串列表,如当前编写的那样,您可以执行以下操作:

contents1 = file[:-1].split(';')
contents = []
for part in contents1:
current = current + part + ';'
contents.append(current)

关于python - While 循环 - 字符串索引超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com