从文件追加文本时列出超出范围的索引

List index out of range when appending text from files

下面的代码抛出一个 IndexErrorlist 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
 """)