从文件追加文本时列出超出范围的索引
List index out of range when appending text from files
下面的代码抛出一个 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)
"Config file"的第一行是mode:custom
,第二行是.txt/text
当我执行 print(temp[1])
时,我会同时得到 "text" 和 "index error"。
您的文件末尾包含一个 \n
- 后一行是 "empty"。
这个 temp = str(line).replace("\n","").split("/")
returns 一个包含 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
""")
下面的代码抛出一个 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)
"Config file"的第一行是mode:custom
,第二行是.txt/text
当我执行 print(temp[1])
时,我会同时得到 "text" 和 "index error"。
您的文件末尾包含一个 \n
- 后一行是 "empty"。
这个 temp = str(line).replace("\n","").split("/")
returns 一个包含 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
""")