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

Python登录系统写入文件每两次操作生成空列表问题排查

简易登录系统空内容写入问题修复方案

核心问题原因

  • 递归调用逻辑错误:当用户名已存在触发Createuser()递归时,递归函数执行完成后,外层未赋值的初始空列表TUN = []、TPW = []仍然会被追加到用户名、密码列表中,最终导致空[]对写入文件。你调用递归后没有终止外层函数的执行,相当于每次用户名重复的场景都会额外插入一组空值。
  • 密码校验递归无返回值:首次密码输入不匹配触发createpw()递归时,未返回递归调用的结果,会导致密码字段最终取到None值。
  • 文件读取未正确关闭:直接用open('File','r')读取文件后未调用close()方法,存在文件句柄泄漏风险。
  • 字符串拆分不严谨:写入文件时每行末尾多了一个逗号,读取拆分时没有限制拆分次数,极端情况下可能出现索引异常。

修复后的代码

def Createuser():
    UN = []
    PW = []
    # 用with语句自动关闭文件
    with open('File','r', encoding='utf-8') as user:
        for i in user:
            # 去除首尾空白后按逗号拆分最多2次,忽略末尾多余的逗号
            a = i.strip().split(",", 2)
            UN.append(a[0])
            PW.append(a[1])
    
    x = input('Enter your Username: ')
    print(x)
    if x in UN:
        print ("User name ",x, " already exists")
        # 递归后直接返回,终止当前外层函数执行
        Createuser()
        return
    
    # 用户名不存在时再走创建逻辑
    TUN = x
    print("Successful")
    
    def createpw():
        pw1 = input('Enter your password: ')
        pw2 = input('verify your password: ')
        if pw1 == pw2:
            print("Successful")
            return pw1
        else:
            print("Passwords do not match")
            # 递归调用时加return,返回正确密码
            return createpw()
    
    TPW = createpw()
    UN.append(TUN)
    PW.append(TPW)
    D = list(zip(UN, PW))
    with open('File','w', encoding='utf-8') as f:
        for item in D:
            f.write('%s,%s,\n' % item)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:45:05