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

时间:2013-04-20 10:57:56

标签: python sql

我收到此错误,突出显示的代码是 的 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

1 个答案:

答案 0 :(得分:1)

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

或者Jen-Ya建议:

return cur.fetchone() is not None