python 在 if 语句中命中超出索引

python hits out of index at if statement

我尝试从此列表中提取信息(保存在文本文件中):

ニンげん、人间 – 人类 (ningen)
じんるい、人类 – 人性 (jinrui)
职业
いしゃ、医者 – 医生 (isha)
かんごし、看护师 – nurse (kangoshi)

我的目标是,让翻译井井有条。我最后有一个这样的列表:

[{"People":["にんげん、人間 – human (ningen)", "じんるい、人類 – humanity (jinrui)"]},{"Occupations":["いしゃ、医者 – doctor (isha)", "かんごし、看護師 – nurse (kangoshi)"]}]

我不明白为什么会出现超出范围的错误。当我设置“count = line+1”时出现错误。当我删除“+ 1”时,程序运行。程序在遇到“if "(" in edited_lines[count]:

时出错运行
with open("data.txt", "r", encoding="UTF-8") as file:
    raw_data = file.readlines()

edited_lines = [line.replace("\n", "") for line in raw_data]

finished_list = []
value_list = []
not_end = True


for line in range(0,len(edited_lines)-1):
    value_list.clear()
    if "(" not in edited_lines[line]:
        count = line+1
        while not_end:
            if "(" in edited_lines[count]:
                value_list.append(edited_lines[count])
                count += 1
            else:
                not_end = False
        new_dict = {edited_lines[line]:value_list}
        finished_list.append(new_dict)
        not_end = True
print(finished_list)

此处错误:

Traceback (most recent call last): File "C:/Users/Celvin/PycharmProjects/extractor/main.py", line 16, in if "(" in edited_lines[count]: IndexError: list index out of range

我想我可能会 运行 在我到达终点时超出索引。所以我正在编辑我的代码并试图避免错误:

with open("data.txt", "r", encoding="UTF-8") as file:
    raw_data = file.readlines()

edited_lines = [line.replace("\n", "") for line in raw_data]

finished_list = []
value_list = []
not_end = True


for line in range(0,len(edited_lines)-1):
    value_list.clear()
    if "(" not in edited_lines[line]:
        count = line+1
        if count >= len(edited_lines): #!!!! added this if statement !!!!
            not_end = False
        while not_end:
            if "(" in edited_lines[count]:
                value_list.append(edited_lines[count])
                count += 1
            else:
                not_end = False
        new_dict = {edited_lines[line]:value_list}
        finished_list.append(new_dict)
        not_end = True
print(finished_list)

我确实犯了一个错误,但我不明白。 我也尝试了一些不同的东西。但是还没有成功。

当我编辑:“count = line+1”到“count = line”时,已经有一些输出是我需要的. [{'People': []}, {'Occupations': []}]

该代码可能包含更多错误。请不要为我解决这些问题。我真的在努力改进并从错误中吸取教训。当我不理解某些东西并且已经尝试过一些东西时,我只会尝试在这里写一些东西。还是初学者。 :)

尝试以下操作:

with open("data.txt", "r", encoding="UTF-8") as file:
    raw_data = file.readlines()

edited_lines = [line.replace("\n", "") for line in raw_data]

finished_list = []

not_end = True


for line in range(0,len(edited_lines)-1):
    value_list = []
    if "(" not in edited_lines[line]:
        count = line+1
        while not_end and count < len(edited_lines):
            if "(" in edited_lines[count]:
                value_list.append(edited_lines[count])
                count += 1
            else:
                not_end = False
        new_dict = {edited_lines[line]: value_list}
        finished_list.append(new_dict)
        not_end = True
        
print(finished_list)

您的代码中存在两个问题,

  1. 处理完最后一行后,您将 count 的值增加到大于 edited_lines 的长度,然后调用 edited_lines[count] 这将导致 索引超出范围错误 所以我检查 count < len(edited_lines) 以阻止这种情况发生。
  2. 您将 value_list 声明为全局变量。在 new_dict = {edited_lines[line]: value_list} 行中,value_list 中的值没有被复制到字典中,但它的地址是,当你稍后清除 value_list 时, new_dict 中的对象仍然指向 value_list 因此字典中的值也被清除。所以我在循环中声明了 value_list 以便为每个循环创建新的 lists。