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

Python进入main()时login()函数反复调用死循环问题如何解决

问题原因分析
    1. 变量作用域错误
      你在login()函数里定义的log是函数局部变量,函数执行完就会销毁,main()函数默认无法访问这个局部变量,所以一开始会提示log变量未定义。
    1. login()函数逻辑错误
      你写的账号遍历逻辑只会执行第一次:只要账号文件第一行的账号密码和你输入的不匹配,就会直接返回False,根本不会遍历后面的账号行,只要你的账号存在文件第二行及以后,哪怕输入正确也会提示验证失败。
    1. 业务流程逻辑混乱
      你原先的流程存在重复调用:如果main()里先调用login(),登录成功后调用loginChoice(),但loginChoice()里又再次调用了login(),等于每次选身份都要重新登录,再加上你完整代码里的main()没有加log = login()语句,还是直接判断不存在的log变量,逻辑完全走偏,就会出现登录菜单循环弹出的问题。
修复后的完整可运行代码
def loginChoice():
    print("\n登录身份选择:")
    print("1. 普通用户")
    print("2. 管理员")
    while True:
        try:
            choice = int(input("请输入选项编号: "))
            if choice in (1,2):
                return choice
            print("请输入1或2")
        except:
            print("请输入合法数字")

def login():
    print("\n===== 登录菜单 =====")
    user = input("请输入用户名: ")
    passw = input("请输入密码: ")
    try:
        with open("userpassword.txt", "r", encoding="utf-8") as fhand:
            for line in fhand:
                line = line.strip()
                if not line:
                    continue
                us, pw = line.split("\t")
                if user == us and passw == pw:
                    print("✅ 登录成功!")
                    return True        
            print("❌ 用户名或密码错误")
            return False
    except FileNotFoundError:
        print("❌ 账号配置文件userpassword.txt不存在")
        return False

def customerMain():
    print("进入普通用户功能页")

def adminMain():
    print("进入管理员功能页")

def main():
    # 登录失败可以重试
    while True:
        log = login()
        if log:
            break
    # 登录成功后再选身份
    identifier = loginChoice()
    if identifier == 1:
        customerMain()
    elif identifier == 2:
        adminMain()

if __name__ == "__main__":
    main()
关键修改说明
  • 调整了业务流程:登录操作统一放在main()入口执行,登录成功后才进入身份选择环节,身份选择函数不再重复调用登录接口,避免重复弹出登录窗口
  • 修复了账号遍历逻辑:只有遍历完全部账号都匹配失败才返回错误,不会出现只有第一行账号可用的问题
  • 新增了输入合法性校验和文件异常处理,避免输入非数字、配置文件不存在导致程序崩溃
  • 增加了登录失败重试逻辑,无需每次输错都重启程序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 22:06:08