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

Python登录登出系统报错求助:UnboundLocalError与SyntaxError

解决UnboundLocalError与SyntaxError问题

错误原因分析

  1. UnboundLocalError:menu函数尝试访问全局变量name和password但未声明,再加上代码存在缩进、语法错误,导致逻辑执行路径异常触发该错误。Python规则:若函数内仅读取变量且未声明global,本应自动读取全局变量,但你的代码错误打乱了执行逻辑。
  2. SyntaxError:你尝试用global声明变量时,把声明语句放在了变量使用之后,Python要求global声明必须在变量首次使用前。
  3. 额外语法错误:if menu="1"是赋值操作,应改为比较运算符==;if语句块未缩进,导致代码逻辑混乱。

修正后的完整代码

def menu():
    # 必须在变量使用前声明全局变量
    global name, password
    menu_input = input("type 1 to logout and login after : ")
    if menu_input == "1":
        print("\nYou're now logged out.\n")
        # 保存当前登录信息
        log_name = name
        log_password = password

        name_inscription_confirm = 0
        print("\nHello,\n")
        
        while name_inscription_confirm == 0:
            name_inscription = input("What's your name? ")
            if name_inscription == log_name:
                name_inscription_confirm = 1
                password_inscription = input("What's your password? ")
                if password_inscription == log_password:
                    print(f"Welcome back '{log_name}'!")
                else:
                    print("\nIncorrect password")
                    # 重置状态,重新输入用户名
                    name_inscription_confirm = 0
            else:
                print("Incorrect username")

# 初始化用户信息
name = input("Choose your name : ")
print("")
password = input("Choose your password : ")

# 调用菜单函数
menu()

关键修正点

  • 将menu变量名改为menu_input,避免和函数名重名混淆
  • 在函数开头添加global name, password,明确告知Python使用全局变量
  • 修正if menu="1"为if menu_input == "1",并正确缩进if块内代码
  • 移除冗余的pass语句和重复的name_inscription输入
  • 调整密码错误后的逻辑,重置状态让用户重新输入用户名
  • 使用f-string替代format,简化字符串格式化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:18:29