为什么Python登录验证逐行读取账号文件时每条不匹配记录都会弹出错误?
登录逻辑问题修复方案
问题根因
你的逻辑将匹配失败的判定放在了遍历账号的循环内部,每读取一行账号不匹配就会立即触发错误弹窗,这是多次弹窗的直接原因。
优化点说明
- 新增
found布尔标记位,初始值为False,用来记录是否匹配到有效账号 - 遍历过程中匹配到账号后,立即将标记位设为
True,执行跳转主GUI逻辑后直接终止循环 - 所有账号遍历完成后,再判断标记位状态,仅当标记位仍为
False时才弹出错误提示 - 用
with上下文管理器处理文件读取,无需手动管理文件关闭逻辑,避免资源泄漏 - 新增空行校验逻辑,避免账号文件存在空行时触发索引报错
修正后代码
def verify_login(login): user = login.login_window.username_entry.get() password = login.login_window.password_entry.get() found = False # 用with上下文管理器读取文件,自动处理资源释放 with open("accounts.txt", 'r') as accounts: for line in accounts.readlines(): login_info = line.strip().split() # 跳过格式不符合要求的行 if len(login_info) < 2: continue if user == login_info[0] and password == login_info[1]: found = True print("Account found. Logging in...") ### ### 跳转主GUI的逻辑写在这里 ### break # 匹配到账号后直接跳出循环,无需遍历后续内容 # 全部账号遍历完成后再判断是否匹配失败 if not found: tk.messagebox.showerror("Error", "Account not found. Try again.") login.login_window.username_entry.delete(0, END) login.login_window.password_entry.delete(0, END)
内容的提问来源于stack exchange,提问作者Payne
相关产品推荐
相关产品推荐

