You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python航班管理系统登录bug:输入同组任意密码即可登录求助

问题原因
  1. 逻辑顺序错误:你先判断用户名存在就把found设为1,后续密码校验如果触发异常,found的值不会被修改,直接保留为1,导致只要用户名存在就能登录。
  2. 密码校验逻辑错误:你使用in判断密码,而不是==,in对于字符串来说是判断子串包含关系,哪怕输入密码的一部分也可能校验通过;同时你对三个分组字典都执行了get查询,当用户名只属于其中一个分组时,另外两个分组的get返回None,执行upwd in None会抛出TypeError,直接被你写的空except捕获,跳过了密码错误的赋值逻辑。
  3. 空的异常捕获块(裸except)隐藏了所有错误,你根本看不到密码校验过程中抛出的异常,无法定位问题。
修复方案

替换原有的login函数即可,修正后的代码如下:

def login(u):
  q=2
  while q==2:
    warnings.filterwarnings("ignore")
    found=0
    uid=u
    upwd=getpass.getpass(prompt="Enter the User Password : -\t")
    # 先判断用户所属分组,再做精准密码校验
    if uid in admin:
        if upwd == admin[uid]:
            found=1
    elif uid in manager:
        if upwd == manager[uid]:
            found=1
    elif uid in standard:
        if upwd == standard[uid]:
            found=1

    if found==0:
        time.sleep(1)
        print("\n... Entered User Name  / Password is wrong ...")
    else:
        time.sleep(1)
        print("\n System Starting.... \a\a\a\a\a\a")
        break

修改说明

  • 去掉了无用的裸except,避免隐藏运行异常
  • 先判断用户所属的分组,仅拿对应分组的密码做相等校验,用==替代in,避免子串匹配的问题
  • 只有用户名存在且密码完全匹配的情况下才会把found设为1,其余情况都为0,不会出现用户名存在就默认校验通过的问题

内容的提问来源于stack exchange,提问作者vivek ck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:54:02