#python #error-handling
Вопрос:
Я создаю систему входа в систему в качестве базы данных, используя SQLite.
def loginfunction(self):
user = self.emailfield.text()
password = self.passwordfield.text()
if len(user)==0 or len(password)==0:
self.error.setText("Please input all fields.")
else:
conn = sqlite3.connect("shop_data.db")
cur = conn.cursor()
query = 'SELECT password FROM login_info WHERE username ='' user "'"
cur.execute(query)
result_pass = cur.fetchone()[0]
if result_pass == password:
print("Successfully logged in.")
self.error.setText("")
else:
self.error.setText("Invalid username or password")
Когда я запускаю его, если пароль не совпадает с именем пользователя из базы данных, он работает, но если я введу неправильное имя пользователя, приложение закроется и распечатает это
main.py", line 38, in loginfunction
result_pass = cur.fetchone()[0]
TypeError: 'NoneType' object is not subscriptable
Вот что говорит журнал SQLite как выглядит база данных база данных
Ответ №1:
fetchone
делает
Извлекает следующую строку результирующего набора запроса, возвращая одну последовательность или
None
когда больше нет доступных данных.
Для любого
'SELECT password FROM login_info WHERE username ='' user "'"
в данных нет соответствующей строки, если имя пользователя, указанное пользователем, отсутствует в столбце имя пользователя. Вы должны сделать что-то вроде
query_result = cur.fetchone()
if result_pass is None:
print("Username with given name is not known")
# action to undertake in such case
result_pass = query_result[0]
затем продолжайте, как и ранее