2012-05-16 12 views
7

我試圖分配沒有在一個字典的關鍵,但我得到一個類型錯誤:分配NoneType與dict

self._rooms[g[0]] = None 
TypeError: 'NoneType' object does not support item assignment 

我的代碼是在這裏:

r = open(filename, 'rU') 
    for line in r: 
     g = line.strip().split(',') 
     if len(g) > 1: 
      r1 = g[0] 
      h = Guest(g[1], str2date(g[2]), str2date(g[3])) 
      self._rooms.set_guest(r1, h) 
     else: 
      self._rooms[g[0]] = None 
    r.close() 

之前,先給我分配,但不是不會。令人奇怪的是:/

+0

不錯的問題+1,你問了一個明確的問題,給了我們一個代碼片段,沒有把我們淹沒,並給了我們一個清晰的回溯! –

+0

這看起來非常類似於這篇文章昨天,http://stackoverflow.com/questions/10600746/python-loading-file-dictionary。這是一個家庭作業問題嗎? – Kafonek

+0

另外,這裏要小心。計算器是不是編輯Python代碼不錯 - 你的前兩行之間的缺口是不完全正確) - 如果我得到了,每次我的Python縮進是錯誤的SO一鎳,我可能會有一對夫婦通過美元現在... – mgilson

回答

8

例外明確規定TypeError: 'NoneType' object does not support item assignment這表明self._rooms實際上None

編輯是: 正如你自己說的

self._rooms = {} 

self._rooms = dict() 

會做什麼您需要清除字典

+1

或者更可能是'self._rooms [g [0]]',因爲沒有''NoneType'對象是不可取消的「TypeError引發。 – chepner

+3

嘗試'無[3] = 4'在你的解釋,你會得到完全相同的例外^^ –

+1

啊,也許這就是它。 – Unistudent

0

它可能是在抱怨self._rooms,我懷疑是None

0

檢查self._rooms是不是None

分配None作爲一種價值的dict的關鍵實際工作:

In [1]: dict(a=None) 
Out[1]: {'a': None} 
1

閱讀您的意見,雅各布,我推測,罪魁禍首就是這條線(未公佈)

d = self._rooms 
self._rooms = d.clear() 

d.clear()將清除字典d(和self._rooms),並返回None。 因此,所有說完成,d是一個空字典和self._roomsNone

最乾淨的解決方案是:

self._rooms.clear() #No need for assignment here! 

尤其是self._rooms似乎已經從dict繼承 - 因此它可能有你不想做失去其他屬性:

self._rooms={} #Now this is just a dict, no longer has `set_guest` method!