Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > TypeError: cannot concatenate


Автор: Sergey912 7.4.2007, 04:48
Код

Traceback (most recent call last):
  File "D:\se\a.py", line 15, in <module>
    cursorL.execute("""SELECT id FROM _base WHERE text LIKE '%"""+substr_a+"""%' AND id <> """+row[0])
TypeError: cannot concatenate 'str' and 'long' objects
>>> 


Вот такая ошибка. substr_a - это строка обыкновенная, а row[0] это число, вот только непонятно что и с чем он не может объеденить и почему? Строку проверял, нормальный str, пробовал отдельно т.е. только на id проверять и только на LIKE в самом запросе.  В итоге получается одно и то же: "cannot concatenate". Первый раз вижу такую ошибку  smile 

Автор: setq 7.4.2007, 08:00
Ну да. Ошибку выдаёт операция сложения: питон не преобразует автоматически числа к строкам, и строки к числам. Необходимо сделать это вручную: YourString + str(YourNumber) или использовать операцию форматирования.

Пожалуй я не могу считаться экспертом в этом вопросе, но всё же если метод execute() поддерживает подстановку параметров, то лучше пользоваться этой фичей.

Автор: kulibinka 7.4.2007, 13:41
ага, вместо "+row[0]" делай "+str(row[0])"

Автор: sir_Jack 11.4.2007, 19:17
если параметров много я предпочитаю делать так:

Код

a = 'string - %s, dec - %d, float - %.3f' % ('hello', 15,1)


вроде нигде не ошибся
очень удобно при создании запросов к БД.. в sql забиваем все переменные в нужном формате и выполняем smile
Но это - на любителя

Автор: Void 11.4.2007, 19:30
Цитата(sir_Jack @  11.4.2007,  21:17 Найти цитируемый пост)
очень удобно при создании запросов к БД.. в sql забиваем все переменные в нужном формате и выполняем

Прямая дорога к SQL injection.

В http://www.python.org/peps/pep-0249.html есть механизм параметров, им и надо пользоваться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)