Python使用装饰器实现待办列表项逐行写入文件遇阻求助
待办列表装饰器写入文件的问题修复
问题根源
- 装饰器参数处理错误:
to_do()函数没有接收参数,调用时wrapper的*args是空元组,导致for i in range(len(args))循环直接跳过,根本没执行写入逻辑。 - 函数调用逻辑错误:原代码错误地尝试通过
func(*args[i])调用原函数,而实际上to_do()的任务列表是函数内部生成后返回的,不是通过参数传入的。
修复后的代码
修正装饰器
def decorator(func): def wrapper(*args, **kwargs): # 执行原函数,获取用户输入的任务列表 task_list = func(*args, **kwargs) # 打开文件逐行写入任务 with open("to_do_list.txt", "a") as f: for task in task_list: f.write(f"{task}\n") return wrapper
修正待办函数(优化变量名和退出逻辑)
@decorator def to_do(): print("TO DO LIST") status = True task_list = [] while status: x = input("Add a task to a list: ") task_list.append(x) q = input("Do you wanna continue typing (Y), or quit (Q)?").lower() # 匹配提示中的退出选项Q,原代码判断n不符合提示逻辑 if q == "q": status = False return task_list to_do()
关键修改说明
- 装饰器先调用原函数拿到返回的任务列表,再遍历列表写入文件,这才符合
to_do()的逻辑(任务是函数内部收集后返回的)。 - 把变量名
list改为task_list,避免覆盖Python内置的list类型。 - 修正退出条件:原提示是输入Q退出,代码里改成判断
q == "q",和提示保持一致。
内容的提问来源于stack exchange,提问作者Kamil Gryboś
相关产品推荐
相关产品推荐

