Python实现登录时无法正确读取文件匹配账号的故障排查
问题定位
你代码里导致始终提示邮箱未绑定、后续校验异常的问题一共4处:
- 最核心的是文件路径写法错误:你写的
open(r"C:\Users\"whatever.txt", 'r')语法有问题,Python带r前缀的原始字符串里,反斜杠依然会转义紧跟的双引号,实际读到的路径根本不是你存账号的那个txt文件,要么读错文件要么读的是空内容,自然匹配不到任何账号。如果你是贴代码时打码隐去了本地用户名,先确认传入open的路径是完全正确、能定位到目标存储文件的。 - 其次是账号匹配逻辑有漏洞:用
self.username in lines做模糊匹配非常不可靠,一是文件读取的每行默认带末尾换行符,要是存储时邮箱前后多打了空格、或者用户输入邮箱时首尾带了空格,直接就匹配不上;二是模糊匹配会出现误判,比如存了aab@test.com的情况下,输入ab@test.com也可能匹配到错误行。 - 第三是字段索引写死有问题:你默认拆分后密码在索引2的位置,也就是默认每行固定有3个
|分隔的字段,但如果你注册时写入的格式是邮箱|密码2个字段,取索引2会直接报越界错误。 - 第四是密码重试逻辑完全写乱了:现有while循环不管密码输对输错,跑一次就会break,甚至密码输错也会打印登录成功的提示,根本达不到循环校验的效果。
修正后代码
def login(self): self.line_holder = '' # 自动去掉输入内容首尾的空格、换行,避免误输入空白导致匹配失败 self.username = input("\nEnter your email: ").strip() # 替换成你自己的真实文件路径,不要混进多余引号,测试阶段可以把txt放在脚本同目录,直接写文件名即可 account_path = r"C:\Users\替换成你自己的电脑用户名\whatever.txt" with open(account_path, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue # 跳过文件里的空行 parts = [p.strip() for p in line.split('|')] # 精确匹配邮箱,避免模糊匹配的误判、漏判问题 if parts[0] == self.username: self.line_holder = parts break if self.line_holder: # 这里的索引要和你注册时写入的字段顺序对应:如果是「邮箱|密码」2字段,密码索引是1;如果是「邮箱|昵称|密码」3字段,密码索引是2 stored_email, stored_nick, stored_pwd = self.line_holder enter_pwd = input(f"\nWelcome {stored_nick}\nPlease enter your password: ").strip() # 密码不对就一直循环提示重输,直到正确才退出 while enter_pwd != stored_pwd: enter_pwd = input(f"\nThis password does not match this account.\n\tEnter your password: ").strip() print(f"{stored_email} you are successfully logged in.") else: print("\nEmail address not linked to any account")
排查建议
- 先手动打开存储账号的txt文件,确认每行确实是用
|分隔字段,邮箱在每行第一个位置,没有乱码、多余空行、错写分隔符的问题。 - 测试阶段可以把存储账号的txt放到和脚本同一个文件夹,路径直接写
whatever.txt,先排除Windows路径转义、路径写错的问题,确认匹配逻辑正常后再改回绝对路径。
内容的提问来源于stack exchange,提问作者Gabriel Onyedika Nnamoko
相关产品推荐
相关产品推荐

