You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用装饰器实现待办列表项逐行写入文件遇阻求助

待办列表装饰器写入文件的问题修复

问题根源

  1. 装饰器参数处理错误:to_do()函数没有接收参数,调用时wrapper的*args是空元组,导致for i in range(len(args))循环直接跳过,根本没执行写入逻辑。
  2. 函数调用逻辑错误:原代码错误地尝试通过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ś

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:18:18