基于.txt文件与字典的Python用户登录代码问题排查及优化
问题排查与代码优化
原代码核心问题
- 异常捕获范围错误:文件打开操作在
try块外,导致文件找不到的异常无法被捕获,需将with open移入try块内。 - 欢迎信息语法错误:
print(f"Welcome", {username})写法错误,多余的大括号会导致输出格式混乱。 - 程序无法终止:
quit是内置函数,必须以quit()形式调用才会终止程序,原代码仅引用函数名不会执行。 - 错误处理过于宽泛:直接捕获
Exception会掩盖文件行格式错误等潜在问题,应细分捕获特定异常。 - 冗余变量:
users = user_log未被使用,属于无效代码。
修复优化后的代码
user_key = {} try: with open("user.txt", "r") as user_log: for line in user_log: # 跳过空行 line = line.strip() if not line: continue # 处理单行格式错误 try: # 限制仅拆分一次,支持密码含逗号的场景 key, value = line.split(',', 1) user_key[key.strip()] = value.strip() except ValueError: print(f"警告:文件中行「{line}」格式错误,已跳过") except FileNotFoundError: print("错误:未找到user.txt文件") quit() # 循环支持多次重试 while True: username = input("请输入用户名: ").strip() if username not in user_key: print("无效的用户名,请重新输入。") continue password = input("请输入密码: ").strip() if password == user_key[username]: print(f"欢迎您,{username}!") break else: print("用户名或密码错误,请重新输入。")
优化说明
- 调整异常捕获逻辑,精准处理文件不存在和行格式错误的情况,避免程序直接崩溃。
- 添加循环重试机制,用户输入错误后可重新尝试,无需重启程序。
- 处理输入内容的首尾空格,避免因用户误输入空格导致的校验失败。
- 限制拆分次数,支持密码中包含逗号的场景。
- 移除冗余变量,简化代码结构。
内容的提问来源于stack exchange,提问作者Will Harris
相关产品推荐
相关产品推荐

