You need to enable JavaScript to run this app. Python登录系统读取JSON文件校验账号密码仅首行生效问题求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 21:06:08