Форум сайта python.su
0
Привет всем!
есть SQL запрос
c.execute("""select max(suc_iter) from results where product_id = %s""", (int(product_id[0])))
print type(c.fetchone()[0])
if c.fetchone()[0] is not None:
age = int(c.fetchone()[0]) + 1
else:
age = 1<type 'long'>
Traceback (most recent call last):
...
if not c.fetchone()[0] is None:
TypeError: 'NoneType' object is not subscriptable
Офлайн
36
whitehatна этапе разработки - как минимум - завернуть в try - except
Как же мне узнать, вернул что-то запрос или нет?
Офлайн
0
вроде читал, там как раз написано, что int возвращается как long. При этом print тоже говорит, что вернулся long… почему же нельзя сравнить long с None?
if not type(c.fetchone()[0]) is None:
a = long(10)
print type(a)
print a
if not a is None:
print "yes"
else:
print "no"
print type(c.fetchone()[0])
print c.fetchone()[0]
if not c.fetchone()[0] is NoneType:
age = int(c.fetchone()[0]) + 1
else:
age = 1
<type 'long'>
10
yes
<type 'long'>
Traceback (most recent call last):
...
print c.fetchone()[0]
TypeError: 'NoneType' object is not subscriptable
a = c.fetchone()[0]
if not a is None:
age = a + 1
else:
age = 1
Отредактировано (Ноя. 3, 2011 13:53:24)
Офлайн
20
Насколько я понимаю метод fetchone() возвращает None. А вы пытаетесь обратиться к нему как к списку и взять его нулевой элемент. Поэтому собственно до “is None” дело не доходит.
Офлайн
0
Sotericугу, сразу 2 ошибки - и с БД неправильно работал, и проверял неправильно.
Насколько я понимаю метод fetchone() возвращает None. А вы пытаетесь обратиться к нему как к списку и взять его нулевой элемент. Поэтому собственно до “is None” дело не доходит.
Офлайн
857
a = c.fetchone()[0]
age = a + 1 if a != None else 1
Офлайн