Найти - Пользователи
Полная версия: непонятки с типами, с None
Начало » Python для новичков » непонятки с типами, с None
1
whitehat
Привет всем!
есть 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
То-есть если запрос возвращает Null, я хочу переменной присвоить единичку, если число - добавить единичку….
а на деле
<type 'long'>
Traceback (most recent call last):
...
if not c.fetchone()[0] is None:
TypeError: 'NoneType' object is not subscriptable
Как же мне узнать, вернул что-то запрос или нет?
pyuser
whitehat
Как же мне узнать, вернул что-то запрос или нет?
на этапе разработки - как минимум - завернуть в try - except
а так-то - почитать dbapi2
whitehat
вроде читал, там как раз написано, что 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
Как так - тип один и тот же <type ‘long’> , в первом случае всё ОК, во втором - ошибка?
UPD:
уже разобрался.
                a = c.fetchone()[0]
if not a is None:
age = a + 1
else:
age = 1
так работает :) понял свою ошибку, спасибо
Soteric
Насколько я понимаю метод fetchone() возвращает None. А вы пытаетесь обратиться к нему как к списку и взять его нулевой элемент. Поэтому собственно до “is None” дело не доходит.
whitehat
Soteric
Насколько я понимаю метод fetchone() возвращает None. А вы пытаетесь обратиться к нему как к списку и взять его нулевой элемент. Поэтому собственно до “is None” дело не доходит.
угу, сразу 2 ошибки - и с БД неправильно работал, и проверял неправильно.
py.user.next
    a = c.fetchone()[0]
age = a + 1 if a != None else 1
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB