2015-05-06 2 views
1

У меня есть некоторый код, который изначально выглядел как это (это часть для цикла, который перебирает результаты запроса):Python считает, что psycopg2 DictRow является список (по крайней мере, это то, что он выглядит)

title['name'] += 'x' 

я иногда получаю следующее исключение (всегда на одной и той же строке):

<class 'psycopg2.extras.DictRow'> 
Traceback (most recent call last): 
    File "rtk_film_nos.py", line 231, in <module> 
    main() 
    File "rtk_film_nos.py", line 150, in main 
    title['name'] += 'x' 
TypeError: list indices must be integers, not str 

Я изменил код, чтобы быть более многословен:

foo = title['name'] 
foo += 'x' 
print type(title) 
title['name'] = foo 

Исключение изменено на:

<class 'psycopg2.extras.DictRow'> 
Traceback (most recent call last): 
    File "rtk_film_nos.py", line 231, in <module> 
    main() 
    File "rtk_film_nos.py", line 150, in main 
    title['name'] = foo 
TypeError: list indices must be integers, not str 

Если я обернуть код в Try/за исключением того, будет вполне счастливо распечатать содержимое заголовка [ «имя»].

Я в недоумении относительно того, что я делаю неправильно. Кажется, что по какой-то причине python (v2.6.6) решает рассматривать dict как список, но я понятия не имею, почему.

+0

Какой версии psycopg2 это? –

ответ

3

Класс DictRow является подклассом list и until version 2.3.0, вы не можете использовать его для назначения элементам по имени.

Вы можете обойти это, глядя вверх индекс столбца непосредственно:

title[title._index['name']] = foo 

или, для дополненного задания:

title[title._index['name']] += 'x' 
+0

Спасибо вам большое! – rhacer

Смежные вопросы