Python登录系统读取accounts.txt报错:ValueError解包值过多
解决登录函数的解包错误
错误原因
你触发的ValueError是因为f.read().split("\n")分割后得到的元素数量不等于2,没法直接赋值给stored_Username和stored_pwd两个变量。大概率是多次注册后文件里有多行账号数据,或者文件存在空行,导致分割后的列表长度超过预期。
修复步骤
修正注册函数的写入格式
每次注册的用户名和加密密码要放在同一行,用分隔符(比如逗号)隔开,一行存储一个账号,避免数据混乱:import hashlib def signup(username, password): # MD5加密密码 md5_pwd = hashlib.md5(password.encode()).hexdigest() # 一行存储一个账号,用逗号分隔用户名和密码 with open("accounts.txt", "a", encoding="utf-8") as f: f.write(f"{username},{md5_pwd}\n")修正登录函数的读取逻辑
登录时要逐行遍历文件内容,匹配输入的用户名,而不是直接拆分整个文件内容:import hashlib def login(username, password): md5_pwd = hashlib.md5(password.encode()).hexdigest() with open("accounts.txt", "r", encoding="utf-8") as f: for line in f: line = line.strip() # 去除换行符和前后空白 if not line: # 跳过空行 continue # 按逗号拆分当前行的用户名和密码 stored_username, stored_pwd = line.split(",") if stored_username == username and stored_pwd == md5_pwd: print("登录成功") return True print("用户名或密码错误") return False清理已有错误格式的文件
如果你的accounts.txt已经有混乱的内容,直接删除文件重新生成,或者手动把每行改成用户名,加密密码的格式。
内容的提问来源于stack exchange,提问作者1Exromoschrome
相关产品推荐
相关产品推荐

