Есть ли способ выйти из текущей функции на основе условия, но не завершить программу - PullRequest
0 голосов
/ 28 октября 2019

У меня есть 2 метода класса. Один метод accountExistance () проверяет, существует ли учетная запись, путем поиска повторяющегося имени пользователя в базе данных, а другой метод customerDetails () записывает сведения о регистрации пользователя в базу данных. Мой метод customerDetails () вызывает метод accountExistance (), и если есть повторяющееся имя пользователя, которое проверяется в методе accountExistance, я возвращаю False и возвращаюсь в исходном методе, если возвращаемое значение равно False sys.exit ()' происходит.

Проблема заключается в том, что я не хотел бы выходить из программы, поскольку она запускает графический интерфейс tkinter, позволяя пользователю изменять регистрационные данные. Скорее, есть ли способ вместо того, чтобы выйти, я могу отменить выполнение там, где оно есть, и не отправлять повторяющиеся значения в базу данных.

Отметим, что customerDetails () вызывается из другого файла при нажатии пользователем регистрации, гдеstringVars () из полей ввода подается в метод класса. Кроме того, внешний вид отступа здесь не отформатирован должным образом, но я создал минимальный пример для логики и вырезал несколько строк кода.

class Database():
def __init__(self):
    Database.phoneNumber = ""

def accountExistance(email, phoneNumber):
    conn=sqlite3.connect("system.db")
    cur=conn.cursor()
    emailExist = cur.execute("SELECT count(email) FROM customerDetails WHERE email = ?", (email,)).fetchall()
    conn.commit()
    print(emailExist)
    phoneExist = cur.execute("SELECT count(phone) FROM customerDetails WHERE phone = ?", (phoneNumber,)).fetchall()
    print(phoneExist)
    conn.commit()
    if emailExist or phoneExist != 0 :
        tk.messagebox.showinfo("Error", "This email and/or phone number is associated with an account")
        return False
        sys.exit()
    #else:
        #return True


#INSERT SIGN UP DETAILS
def customerDetails(forename, surname, dob, address, city,
    county, postcode, phone, email, password,verified, gender):

    print(forename, surname, dob, address, city, county, postcode,
          postcode, phone, email, password, verified, gender)

    test = Database.accountExistance(email, phone)
    if test == False:
        sys.exit()

    age = 0
    conn=sqlite3.connect("system.db")
    cur=conn.cursor()

    cur.execute("INSERT INTO customerDetails VALUES 
    (NULL,?,?,?,?,?,?,?,?,?,?,?,?,?)",(forename, surname, dob, address, city, 
    county, postcode, phone, email, password, verified, age, gender))
    conn.commit()
    conn.close()

1 Ответ

0 голосов
/ 28 октября 2019

Просто измените ваше условие на следующее:

test = Database.accountExistance(email, phone)
if test == False:
    return # Stops the execution of the function

Кроме того, если test обязательно либо True, либо False, вы можете проверить его значение напрямую:

if not test: 

совпадает с

if test == False:
...