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

Python代码报错NameError: name 'assign_username' is not defined求助

解决NameError: name 'assign_username' is not defined问题

问题原因

assign_username、task_name等变量仅在menu == "a"的分支内部定义,属于局部变量。如果程序直接进入menu == "va"分支,这些变量从未被创建,因此触发NameError——简单说就是你没先执行a操作生成这些变量,直接跑va操作自然找不到它们。

解决方案

根据需求,有几种处理方式:

1. 检查变量是否存在,不存在则提示用户

在va分支里先判断变量是否已定义,未定义则引导用户先执行添加操作:

elif menu == "va":
    try:
        print(f"负责人: {assign_username}")
        print(f"任务: {task_name}")
        print(f"任务描述: {task_desc}")
        print(f"分配日期: {current_date}")
        print(f"截止日期: {task_due_date}")
        print(f"任务完成状态: {task_completion}")
    except NameError:
        print("请先执行'a'操作添加任务信息!")

2. 提前初始化变量

在所有分支代码前,先把需要的变量初始化为空值,避免未定义的情况:

# 提前初始化所有任务相关变量
assign_username = ""
task_name = ""
task_desc = ""
current_date = ""
task_due_date = ""
task_completion = ""

# 后续分支代码
elif menu == "a":
    assign_username = input("请输入任务负责人的用户名:\n")
    task_name = input("请输入任务标题:\n")
    task_desc = input("请输入任务描述:\n")
    task_due_date = input("请输入任务截止日期:\n")
    current_date = input("请输入当前日期:\n")
    task_completion = input("任务是否完成?是/否:\n")
    f2.write(f'\n{assign_username}, {task_name}, {task_desc}, {current_date}, {task_due_date}, {task_completion}')

elif menu == "va":
    if not assign_username:
        print("还未添加任务信息,请先执行'a'操作!")
    else:
        print(f"负责人: {assign_username}")
        print(f"任务: {task_name}")
        print(f"任务描述: {task_desc}")
        print(f"分配日期: {current_date}")
        print(f"截止日期: {task_due_date}")
        print(f"任务完成状态: {task_completion}")

3. 从文件读取任务信息(更合理的方案)

如果va是要查看已保存到文件的任务,而非当前会话刚输入的内容,应该直接从文件读取数据——毕竟程序重启后,分支内的变量会消失,文件才是持久化存储的载体:

elif menu == "va":
    f2.seek(0)  # 移动到文件开头位置
    task_lines = f2.readlines()
    if not task_lines:
        print("暂无任务信息!")
    else:
        # 读取最后一条任务(可根据需求修改为遍历所有任务)
        last_task = task_lines[-1].strip()
        # 分割文件中存储的任务数据
        assign_username, task_name, task_desc, current_date, task_due_date, task_completion = last_task.split(", ")
        print(f"负责人: {assign_username}")
        print(f"任务: {task_name}")
        print(f"任务描述: {task_desc}")
        print(f"分配日期: {current_date}")
        print(f"截止日期: {task_due_date}")
        print(f"任务完成状态: {task_completion}")

内容的提问来源于stack exchange,提问作者Maverick45

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:11:10