繁体   English   中英

简单的密码检查TypeError:“ NoneType”对象没有属性“ __getitem__”

[英]Simple password check TypeError: 'NoneType' object has no attribute '__getitem__'

我收到此错误,突出显示的代码是passW [0]

该错误的确切含义是什么? 这是一个简单的比较,但是由于它作为元组返回,因此我无法进行比较。 我需要将密码更改为元组吗? 还是我必须做另一种方法才能使它平等地出现? 这是我的完整代码。 这是一个简单的密码检查。

def check_login(db, useremail, password):
    """returns True if password matches stored"""

    cur = db.cursor()
    password1 = db.crypt(password)
    ur = "SELECT email FROM users WHERE email = ?"
    cur.execute(ur, (useremail,))
    user = cur.fetchone()
    if user[0] == useremail:
        pas = "SELECT password FROM users WHERE email = ? AND password = ?"
        cur.execute(pas, (useremail, password1,))
        passW = cur.fetchone()
        if passW[0] == password1:
            return True
        else:
            return False
passW = cur.fetchone()

如果没有匹配项,则cur.fetchone()返回None 由于您要从用户那里获取密码,并与密码和电子邮件一起查找,因此如果密码不匹配,则不会找到该行。 结果, cur.fetchone()返回None。 实际上,这是:

passW = cur.fetchone()
if passW[0] == password1:
    return True
else:
    return False

大概可以变成:

return if cur.fetchone() is not None:
    return True
return False

或如詹亚建议的那样:

return cur.fetchone() is not None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM