Python 尝试按索引删除多个列表元素时发生UnboundLocalError

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 =

我正在用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 = 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()