Python无GUI登录系统注册功能无法正确检测重复用户名问题求助
问题根因
你的注册逻辑失效是3个问题共同导致的:
a+模式打开文件时,文件指针默认停在文件末尾,直接调用readlines()读不到之前存储的账户内容,校验逻辑直接走了写入分支- 就算读到了文件内容,你直接判断
用户名 in 行列表,但每行的格式是用户名 , 密码\n,不可能和单独的用户名匹配成功 - 额外问题:
Login函数定义要求传入用户名、密码参数,但start()里调用Login()没有传参,走到登录流程会直接报错
修复方法
调整注册逻辑:先以只读模式打开文件提取所有已注册用户名校验,确认未占用后再用追加模式写入新账户,同时修复登录调用的参数问题。
修复后的完整代码如下:
def start(): option = input('Welcome to Skies site!\nLogin or register?: ') if (option != 'login' and option != 'register'): print('Invalid input, try again.') start() elif option == 'login': # 补充登录时的用户名密码输入逻辑 username = input('Enter username: ') password = input('Enter password: ') Login(username, password) elif option == 'register': Register() def Login(username, password): success = False file = open('user_details.txt','r') for i in file: a,b = i.split(',') a = a.strip() # 移除用户名前后的空格、换行符 b = b.strip() if (a==username and b==password): success = True break file.close() if success == True: print('Login Successful!') else: print('Wrong username or password. Try again.') def Register(): username = input('Enter username: ') password = input('Enter password: ') # 先读文件校验用户名 is_exist = False try: with open('user_details.txt','r') as file: for line in file: if not line.strip(): continue saved_username = line.split(',')[0].strip() if saved_username == username: is_exist = True break except FileNotFoundError: # 文件不存在说明还没有注册过账户,直接走写入逻辑 pass if is_exist: print('Username taken. Try another') Register() else: print('Username available!') with open('user_details.txt','a') as file: file.write(f'\n{username} , {password}') print('Credentials Saved!') print('--> Log in now <--') Login(username, password) def user_info(username, password, verify): print('>>>>>>>>>>>>>>>>>>>>') print('Account is: ACTIVE') print('Username: '+username) start()
补充说明
- 新增了文件不存在的异常捕获,第一次运行没有
user_details.txt文件时不会报错 - 用户名比对前先做了
strip()处理,避免空格、换行符导致的匹配失败 - 移除了不必要的全局变量声明,避免变量污染
内容的提问来源于stack exchange,提问作者SkiesLearns
相关产品推荐
相关产品推荐

