LINUX.ORG.RU

[Python] Проверка на None с присваиванием

 


0

0

Доброго времени суток, All:

Кто-нибудь знает, как в таком выражении проверить, что curr.fetchone() не является None и сразу присвоить его тьюплу, а то пытаюсь сделать так, но если юзверя нет в бд, то вылазит экзепшн TypeError: 'NoneType' object is not iterable. Вот думаю, кроме отлова исключения есть ли способы?

curr.execute('SELECT (passwd) FROM users WHERE login = (%s)', (login,))
(gotpasswd,) = curr.fetchone()

---
С Уважением,


Отлов исключения - это как раз правильный путь в этой ситуации. Иначе код получается хуже.

Davidov ★★★★
()
Ответ на: комментарий от Davidov

Благодарю Вас. Попробую всё таки отловом. Просто думал, может в языке есть какие-нибудь средства для подобных вещей, чтобы "по-простому".

---
С Уважением,

BuG2BuG
() автор топика
Ответ на: комментарий от BuG2BuG

Для полноты ответа, приведу такой вариант (безусловно лучше ловит эксепшены)

Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = None
>>> b = (1,)
>>> c = None if a is None else a
>>> print c
None
>>> c = None if b is None else b
>>> print c
(1,)

rab_boziy
()

Ну, в данном конкретном случае можно, например, вот так:
for (gotpasswd,) in curr:
 ...
Или вот так:
gotpasswd=([i for (i,) in curr]+[DEFAULT])[0]
Но это извращение идеи.

DonkeyHot ★★★★★
()
Ответ на: комментарий от rab_boziy

Проктолог детектед!

curr.execute('SELECT (passwd) FROM users WHERE login = (%s)', (login,)) tmp = curr.fetchone() gotpasswd = tmp and tmp[0]

c: drichers

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.