2015-05-06 28 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)正在決定將字典作爲一個列表來處理,但我不知道爲什麼。

+0

什麼版本Psycopg2的這是什麼? –

回答

3

DictRow類是list的子類,而until version 2.3.0不能用它來按名稱分配元素。

您可以變通的作法是直接查找列索引:

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

,或者爲你的增量賦值:

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

非常感謝你! – rhacer

相關問題