Python 尝试按索引删除多个列表元素时发生UnboundLocalError
我正在用Python编写一个任务列表程序。在我的函数Python 尝试按索引删除多个列表元素时发生UnboundLocalError,python,python-3.x,Python,Python 3.x,我正在用Python编写一个任务列表程序。在我的函数delete\u task中,我要求用户输入一个字符串,以给出他们想要删除的任务的索引。它将接受诸如1、1、2、1-3、1-2、4、5等输入,然后生成索引列表,例如,输入1-3、5将生成列表[1、2、3、5] 当然,以这种方式尝试从列表中删除项目的问题是,每次删除项目时,索引都会更改。因此,我尝试使用列表理解来挑选任务列表中不在索引中的项目 def delete_task(): display_list() indices =
delete\u task
中,我要求用户输入一个字符串,以给出他们想要删除的任务的索引。它将接受诸如1
、1、2
、1-3
、1-2、4、5
等输入,然后生成索引
列表,例如,输入1-3、5
将生成列表[1、2、3、5]
当然,以这种方式尝试从列表中删除项目的问题是,每次删除项目时,索引都会更改。因此,我尝试使用列表理解来挑选任务列表中不在索引中的项目
def delete_task():
display_list()
indices = parse_range(input("\nEnter the task number[s] to delete: "))
deltodo = [task for index, task in enumerate(todo, 1) if index not in indices]
todo = deltodo
todo
是类对象的列表。下面是班级宣言:
class Task():
t = ""
checked = False
def __init__(self, t, checked):
self.t = t
self.checked = checked
global todo
todo = []
列表理解出现问题,程序抛出错误:
Traceback (most recent call last):
File "todo.py", line 123, in <module>
delete_task()
File "todo.py", line 38, in delete_task
deltodo = [task for index, task in enumerate(todo, 1) if index not in indices]
UnboundLocalError: local variable 'todo' referenced before assignment
如果我需要在每个函数中全局声明todo
,为什么它在这里工作,而在delete\u task
中不工作?将全局todo
语句放在delete\u task
函数的顶部。global
关键字允许您在当前范围之外修改变量,因此必须将该变量放在要修改它的范围之内。在本例中,它位于delete\u任务中
def delete_task():
全球待办事项
显示列表()
索引=解析范围(输入(“\n输入要删除的任务编号:”)
deltodo=[索引中的任务,枚举中的任务(todo,1),如果索引不在索引中]
托多=德尔托多
编辑:回答您的问题,即为什么错误不会出现在其他函数中,您可以在其范围之外附加或使用全局变量。你就是不能修改它们
有关全局关键字的更多信息,请查看链接,这是否回答了您的问题todo
在您的案例中已经是一个全局变量。如果您想在delete_task
内部分配任务,您需要在delete_task
内部编写global todo
,正如您链接的文章中所解释的那样。@mkrieger1,您的解释是有道理的,但我想知道为什么我在其他任何函数中都没有遇到问题。我编辑了进一步的解释。如果要分配给全局变量,只需使用global
关键字。@Lou您可以在全局变量的作用域之外追加或使用全局变量。你就是不能修改它们。
def add_task():
clear()
display_list()
t = Task(input("\nTask: "), False)
todo.append(t)
save_list()