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

时间:2018-10-11 16:43:42

标签: python python-3.x index-error

下面的代码抛出一个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])时,我同时得到“文本”和“索引错误”。

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
 """)