Python登录系统读取JSON文件校验账号密码仅首行生效问题求助
问题根因
- 登录逻辑中,遍历文件行的首次循环末尾直接加了
break,同时手动调用了f.close(),导致程序永远只会读取文件第一行就终止校验,这是只有首行账号能生效的核心原因 - 用
with open语法时无需手动关闭文件,上下文管理器会自动处理文件资源释放 - 你声明要使用JSON存储数据,但实际写入的是逗号分隔的纯文本,既不符合JSON格式规范,也没有做用户名重复校验,存在同用户名绑定多密码的问题
- 原登录逻辑每读取一行就直接输出成功/失败提示,若匹配到正确账号后没有终止循环,会出现重复提示的问题
- 注册时直接在文件开头追加换行,若文件为空会生成空首行,读取时空行做
split(',')会抛出无法拆包为2个变量的异常
修复后代码
import json import os print("LoginSystem @mvtthis") myRL = input("请选择登录/注册(输入Login/Register):") data_path = 'LoginSystemData.json' # 初始化JSON格式的用户数据文件 if not os.path.exists(data_path): with open(data_path, 'w', encoding='utf-8') as f: json.dump([], f) # 提前读取所有用户数据 with open(data_path, 'r', encoding='utf-8') as f: user_list = json.load(f) if myRL == "Register": User = input("用户名:").strip() PW = input("密码:").strip() PW1 = input("确认密码:").strip() # 校验用户名是否已注册 for user in user_list: if user['username'] == User: print("注册失败:用户名已存在") exit() if PW == PW1: user_list.append({"username": User, "password": PW}) with open(data_path, 'w', encoding='utf-8') as f: json.dump(user_list, f, ensure_ascii=False, indent=2) print("注册成功") else: print("注册失败:两次输入的密码不一致") elif myRL == "Login": User = input("用户名:").strip() PW = input("密码:").strip() success = False for user in user_list: if user['username'] == User and user['password'] == PW: success = True break if success: print("登录成功") else: print("登录失败:用户名或密码错误")
内容的提问来源于stack exchange,提问作者mvtthis
相关产品推荐
相关产品推荐

