下面的代码抛出一个IndexError
,说list index out of range
,但是当我在该索引上打印该项目时,它表明那里有文本。
那我为什么会出现索引错误?
代码:
paths = []
formats = []
with open("config.cf","r") as config_file:
global sort_mode
sort_mode = config_file.readline().replace("\n","").split(":")
if sort_mode[1] == "custom":
for line in config_file:
temp = str(line).replace("\n","").split("/")
if temp[0] == "mode:":
continue
format_list = str(temp[0]).split(",")
paths.append(temp[1]) # <---- Error
formats.append(format_list)
“配置文件”的第一行是mode:custom
,第二行是.txt/text
当我做print(temp[1])
时,我同时得到“文本”和“索引错误”。
答案 0 :(得分:0)
您的文件末尾包含一个\n
-后面的行为“空”。
此temp = str(line).replace("\n","").split("/")
返回一个包含1个元素的列表。
之后,您使用temp[1]
访问此列表-这将导致索引错误。
下次遇到此类错误时,将访问线路替换为列表的打印内容,这样就可以很好地了解出了什么问题。
使用
if len(temp) < 2 or temp[0] == "mode:":
continue
空列表是虚假的,此后还会继续。
遇到异常时,您始终可以做的另一件事:捕获异常。
try:
print( [][20])
except IndexError as e:
print(e)
代码进行测试(首先使用config.cf,然后使用另一个创建代码):
# works
with open("config.cf","w") as f:
f.write("""mode:custom
.txt/text""")
# fails
with open("config.cf","w") as f:
f.write("""mode:custom
.txt/text
""")