2015-03-19 5 views
0

Я создаю систему входа для части моей курсовой работы, где она запрашивает базу данных, чтобы увидеть, верны ли данные. Он отлично работает, пока я не вводим логин, которого нет в базе данных. В любом случае, я могу заставить работать, даже после того, как mycursor.fetchone() дает ошибку, чтобы ничего не делать?Python: Login none error

Код ниже подпрограммы У меня возникли проблемы с:

#the error message I'm receiving 
username, password = mycursor.fetchone() 
TypeError: 'NoneType' object is not iterable 

#the subroutine I'm having trouble with 
def accept(self): 
     conn = mysql.connector.connect(user, password, host, database) 
     #create cursor between python and mysql 
     mycursor = conn.cursor() 

     query = """ 
      SELECT 
       username, password 
      FROM 
       UserInfo.User 
      WHERE 
       username = %s AND password = %s 
     """ 
     mycursor.execute(query, (self.textName.text(),self.textPass.text(),)) 
     global username 
     username, password = mycursor.fetchone()   
     #self.textName.text() and self.textPass.text() is the username and password entered by the user 
     if username == self.textName.text() and password == self.textPass.text(): 
      self.GoToLogin() 

     else: 
      #the error message I want to display 
      QtGui.QMessageBox.warning(
       self, 'Error', 'Username and password are incorrect') 

ответ

1

Добавить try except блок и игнорировать исключение, которое происходит, когда запись не найдена или если несколько записей найдены.

try: 
    #db call 
except (SpecificException, AnotherException): 
    pass 

Это хорошо, чтобы поймать конкретных исключений, чем перехватывать все исключения, но в этом случае вы можете просто поймать глобальный Exception

И нет никаких причин, чтобы снова проверить, если имя пользователя и пароль совпадают, так как вы 'уже передают это как часть запроса.

+0

У меня возникли проблемы с исключениями –

+0

Вот что я имел в виду. Вы не обрабатываете исключение, вызванное 'fetchone', когда пользователь не существует. Вот почему вы должны поместить вызов этого метода между блоком try-except и игнорировать исключение. Поэтому вызовите предупреждение внутри блока except и goto-login сразу после 'fetchone'. –