TypeError: объект «NoneType» не является итерируемым. cur.fetchone() останавливает цикл while

Итак, здесь я в основном пытаюсь сделать вариант входа в свою программу, где она запрашивает базу данных, чтобы убедиться, что данные верны. Он работает нормально, пока я не ввожу логин, которого нет в базе данных. Могу ли я в любом случае заставить работать во время работы даже после того, как cur.fetchone() выдает ошибку из-за того, что ничего не исправлено?

login= False    
print "*.*.*.*.*.*.*LOGIN*.*.*.*.*.*.*"
while login == False:
    login1=input("Id:")
    login1pw=raw_input("Password:")
    cur.execute("select id_func from func where (id_func = %s and function = 'admin');", (login1,))
    login2, = cur.fetchone()        
    cur.execute("select pw from func where id_func = %s", (login1,))
    login2pw, = cur.fetchone()
    if (login1 == login2 and login1pw == login2pw):
        login = True
        print "Login successful"

Я получаю эту ошибку:

TypeError: объект «NoneType» не является итерируемым

Заранее спасибо!


person Varzoc    schedule 14.12.2013    source источник


Ответы (1)


Вы можете добавить:

r = cur.fetchone ()
if not r:
    print ('Login failed')
    continue
login2, = r
....

То же самое для второй выборки.

person Hyperboreus    schedule 14.12.2013
comment
Но теперь он не проверяет, совпадает ли пароль из ввода с паролем из базы данных. На самом деле он никогда не запускает этот код: if (login1 == login2 и login1pw == login2pw): login = True print - person Varzoc; 15.12.2013
comment
Неважно, мне просто нужно было добавить другую переменную и cur.fetchone. Прости за это. Он работал нормально! - person Varzoc; 15.12.2013