Python登录函数校验文件账号密码时adusername未定义如何修复
问题修复方案
错误原因
- 变量作用域问题:
adusername、adpassword是adminlogindetails()函数的局部变量,仅在该函数内部生效,adminverification()函数无法直接访问,因此触发NameError报错。 - 逻辑覆盖错误:
adminverification()中你先将用户输入的账号密码存入adun、adpw变量,后续遍历文件内容时又将这两个变量重新赋值为文件读取到的账号密码,直接覆盖了用户输入的原始内容,校验逻辑完全失效。 - 隐性边界问题:读取文件每行内容拆分后,密码末尾会携带换行符
\n,直接比对会永远匹配失败。
修复后代码
def adminlogindetails(): adusername = input("Admin Username: ") adpassword = input("Admin Password: ") # 可自行补充账号去重逻辑,避免同一个账号存储多个密码 with open("adlogindetails.txt", "a", encoding="utf-8") as adfile: adfile.write(f"{adusername},{adpassword}\n") def adminverification(): # 用独立变量存储用户输入的待校验信息,避免和文件读取变量重名 input_un = input("Enter your username:") input_pw = input("Enter your password:") # 用with语法自动管理文件关闭,避免资源泄漏 with open("adlogindetails.txt", "r", encoding="utf-8") as adinfo: login_success = False for line in adinfo: # strip()去掉首尾空白字符(包括换行符)再拆分 stored_un, stored_pw = line.strip().split(",") if stored_un == input_un and stored_pw == input_pw: login_success = True break if login_success: print("Login successful!") adminoptions() else: print("Incorrect username/password") roleselection() adminverification()
补充说明
原有逻辑遍历每行如果不匹配就直接跳转roleselection(),会导致仅校验第一行账号就结束流程,修正后先遍历所有存储的账号,匹配成功才走登录成功逻辑,全部匹配失败再走错误分支,符合正常登录校验逻辑。
内容的提问来源于stack exchange,提问作者Crowno
相关产品推荐
相关产品推荐

