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
相关产品推荐
相关产品推荐

