不确定是什么导致我的代码中出现索引错误
Not sure what is causing index error in my code
我正在从事一个旨在读取、创建和操作虚拟待办事项列表的小项目。有一个 checkbox
class,一个函数 open_create_boxes
用于根据纯文本文件的内容创建复选框对象列表,还有一个函数 create_to_do_list_file
用于编写一个文件可以被其他函数读取。
# Define the checkbox class
class checkbox:
def __init__(self,label):
self.label = label
self.checked = False
def check(self):
self.checked = True
def read(self):
if self.checked:
return f"x | {self.label}"
if not self.checked:
return f"o | {self.label}"
def open_create_boxes(file):
# Open the to-do list
opened_list = open(f"{file}.dat", "r")
#Split the to-do list by line
parsed_line = opened_list.read().split("\n")
next_parsed = []
# Split each element in parsed list by the pipe symbol
for i in parsed_line:
next_parsed.append(i.split("|"))
to_do_list = []
# Iterates through the new list, creates checkbox object, checks to see if it is "checked" or not
for i in next_parsed:
b = checkbox(i[1])
if i[0] == "x":
b.check()
to_do_list.append(b)
return to_do_list
def create_to_do_list_file(list,label):
# Open or create a file label.dat
new_file = open(f"{label}.dat", "w")
for n in list:
new_file.write(f"\no|{n}")
create_to_do_list_file(["Task"],"filename")
open_create_boxes("filename")
运行 这段代码给我错误:
File "/home/genie/Desktop/checkboxes/checkboxes.py", line 41, in <module>
open_create_boxes("filename")
File "/home/genie/Desktop/checkboxes/checkboxes.py", line 28, in open_create_boxes
b = checkbox(i[1])
IndexError: list index out of range
所以我的 open_create_boxes
函数出了点问题,列表中出现了 <2 个元素。我已经多次重写此代码并得到相同或相似的错误。
这里有什么帮助吗?我是初学者,所以我想有一个明显的修复方法,但我似乎无法解决。
谢谢!!
快速 运行 您的代码并检查创建的文件,发现它的第一行是空的。当然,如果您尝试拆分它,您只会得到一个字段。为什么在数据的前面写\n
?
同样,您读取文件的代码无法解释空行,无论是在文件的开头还是结尾。
更切题的是,您忘记关闭您编写的文件,并且通常会使事情过于复杂。
下面是两个 file-management 函数的快速重构。
def open_create_boxes(file):
to_do_list = []
with open(f"{file}.dat", "r") as lines:
for line in lines:
i = line.rstrip("\n").split("|")
# print("#", i)
b = checkbox(i[1])
if i[0] == "x":
b.check()
to_do_list.append(b)
return to_do_list
# Don't call your variable "list"
def create_to_do_list_file (items ,label):
with open(f"{label}.dat", "w") as new_file:
for n in items:
new_file.write(f"o|{n}\n")
作为调试问题的一般第一个提示,将您的问题分解成更小的步骤并在不同点添加 print
语句以验证变量是否包含您希望它们应该包含的内容,或者使用调试器并设置断点以检查程序在这些位置的状态。
我正在从事一个旨在读取、创建和操作虚拟待办事项列表的小项目。有一个 checkbox
class,一个函数 open_create_boxes
用于根据纯文本文件的内容创建复选框对象列表,还有一个函数 create_to_do_list_file
用于编写一个文件可以被其他函数读取。
# Define the checkbox class
class checkbox:
def __init__(self,label):
self.label = label
self.checked = False
def check(self):
self.checked = True
def read(self):
if self.checked:
return f"x | {self.label}"
if not self.checked:
return f"o | {self.label}"
def open_create_boxes(file):
# Open the to-do list
opened_list = open(f"{file}.dat", "r")
#Split the to-do list by line
parsed_line = opened_list.read().split("\n")
next_parsed = []
# Split each element in parsed list by the pipe symbol
for i in parsed_line:
next_parsed.append(i.split("|"))
to_do_list = []
# Iterates through the new list, creates checkbox object, checks to see if it is "checked" or not
for i in next_parsed:
b = checkbox(i[1])
if i[0] == "x":
b.check()
to_do_list.append(b)
return to_do_list
def create_to_do_list_file(list,label):
# Open or create a file label.dat
new_file = open(f"{label}.dat", "w")
for n in list:
new_file.write(f"\no|{n}")
create_to_do_list_file(["Task"],"filename")
open_create_boxes("filename")
运行 这段代码给我错误:
File "/home/genie/Desktop/checkboxes/checkboxes.py", line 41, in <module>
open_create_boxes("filename")
File "/home/genie/Desktop/checkboxes/checkboxes.py", line 28, in open_create_boxes
b = checkbox(i[1])
IndexError: list index out of range
所以我的 open_create_boxes
函数出了点问题,列表中出现了 <2 个元素。我已经多次重写此代码并得到相同或相似的错误。
这里有什么帮助吗?我是初学者,所以我想有一个明显的修复方法,但我似乎无法解决。
谢谢!!
快速 运行 您的代码并检查创建的文件,发现它的第一行是空的。当然,如果您尝试拆分它,您只会得到一个字段。为什么在数据的前面写\n
?
同样,您读取文件的代码无法解释空行,无论是在文件的开头还是结尾。
更切题的是,您忘记关闭您编写的文件,并且通常会使事情过于复杂。
下面是两个 file-management 函数的快速重构。
def open_create_boxes(file):
to_do_list = []
with open(f"{file}.dat", "r") as lines:
for line in lines:
i = line.rstrip("\n").split("|")
# print("#", i)
b = checkbox(i[1])
if i[0] == "x":
b.check()
to_do_list.append(b)
return to_do_list
# Don't call your variable "list"
def create_to_do_list_file (items ,label):
with open(f"{label}.dat", "w") as new_file:
for n in items:
new_file.write(f"o|{n}\n")
作为调试问题的一般第一个提示,将您的问题分解成更小的步骤并在不同点添加 print
语句以验证变量是否包含您希望它们应该包含的内容,或者使用调试器并设置断点以检查程序在这些位置的状态。