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)
您的代码中存在两个问题,
- 处理完最后一行后,您将
count
的值增加到大于 edited_lines
的长度,然后调用 edited_lines[count]
这将导致 索引超出范围错误 所以我检查 count < len(edited_lines)
以阻止这种情况发生。
- 您将
value_list
声明为全局变量。在 new_dict = {edited_lines[line]: value_list}
行中,value_list
中的值没有被复制到字典中,但它的地址是,当你稍后清除 value_list
时, new_dict
中的对象仍然指向 value_list
因此字典中的值也被清除。所以我在循环中声明了 value_list
以便为每个循环创建新的 lists。
我尝试从此列表中提取信息(保存在文本文件中):
人
ニンげん、人间 – 人类 (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)
您的代码中存在两个问题,
- 处理完最后一行后,您将
count
的值增加到大于edited_lines
的长度,然后调用edited_lines[count]
这将导致 索引超出范围错误 所以我检查count < len(edited_lines)
以阻止这种情况发生。 - 您将
value_list
声明为全局变量。在new_dict = {edited_lines[line]: value_list}
行中,value_list
中的值没有被复制到字典中,但它的地址是,当你稍后清除value_list
时,new_dict
中的对象仍然指向value_list
因此字典中的值也被清除。所以我在循环中声明了value_list
以便为每个循环创建新的 lists。