Python函数在第二次迭代后不会给变量赋值

2024-09-30 03:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文


我正在创建一个小银行系统。至于现在,完全是在终点站。
您可以通过提供用户名和密码登录。我创建了一个类来验证给定的用户名和密码是否与数据库中的数据匹配。

如果用户名和密码不匹配,它会一遍又一遍地询问您的用户名和密码。
之后,将从用户类创建一个用户,依此类推。。。

问题是: 当您在第一次尝试时键入凭据时,一切正常。
但当您键入错误的凭据时,应用程序将再次提示输入用户名和密码,login()函数将返回用户名,但不会将其分配给用于创建用户的变量。

login()函数:

from Login.loginValidator import loginValidator
def login():

    validator = loginValidator()
    username = input("Enter Username: ")
    password = input("Enter Password: ")
    result = validator.validateLogin(username, password)
    if result:
        print(username)
        return username
    else:
        login()

loginValidator类:

class loginValidator:
    def validateLogin(self, username, password):

        def checkIfUsernameExists(username):
            connection = psycopg2.connect(
                "dbname={} user={} host={} password={}".format(dbname, dbuser, dbhost, dbpassword))
            cursor = connection.cursor()
            cursor.execute("SELECT username FROM clientstandardinfo WHERE username = %s", [username])
            result = cursor.fetchone()
            cursor.close()
            connection.close()
            gc.collect()
            if result is not None:
                return True

        result = checkIfUsernameExists(username)
        if result:
            connection = psycopg2.connect(
                "dbname={} user={} host={} password={}".format(dbname, dbuser, dbhost, dbpassword))
            cursor = connection.cursor()
            cursor.execute("SELECT password FROM clientstandardinfo WHERE username = %s", [username])
            passResult = cursor.fetchone()[0]
            if sha256_crypt.verify(password, passResult):
                print("Login Success")
                return True
            else:
                print("Wrong password")
                return False
        else:
            print("Username doesn't exist")
            return False


getUserInfo函数:

def getUserInfo(clientUsername):

    print("username from getUserInfo: \n", clientUsername)
    connection = psycopg2.connect("dbname={} user={} host={} password={}".format(dbname, dbuser, dbhost, dbpassword))
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM clientstandardinfo WHERE username = %s",[clientUsername])
    result = cursor.fetchone()
    print("Result from getUserInfo: \n",result)
    cursor.close()
    connection.close()

    #1=firstname, 2=lastname, 3=username, 4=password,
    # 5=email, 6=dateOfBirth, 7=gender, 8=admin, 9=dateofregister

    return result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9]

main()函数:

def main():
        username = login()
        print("MAIN FUNCTION - username:\n",username)
        client_user = User(*getUserInfo(username))

输出为(第一次键入错误的凭据后):

<prints correct username that comes from print in login() function>
MAIN FUNCTION - username:
 None
username from getUserInfo: 
 None
Result from getUserInfo: 
 None
Traceback (most recent call last):
  File "/Users/mac/Dropbox/banking raw/main.py", line 24, in <module>
    main()
  File "/Users/mac/Dropbox/banking raw/main.py", line 16, in main
    client_user = User(*getUserInfo(username))
  File "/Users/mac/Dropbox/banking raw/db.py", line 22, in getUserInfo
    return result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9]
TypeError: 'NoneType' object is not subscriptable

Process finished with exit code 1




我不太明白为什么它不起作用。希望你能理解我的解释
我将感谢你的帮助。另外,如果您非常欢迎任何关于代码“质量”的反馈。你知道吗


Tags: from密码returnmainusernameloginpasswordresult

热门问题