web-dev-qa-db-ja.com

NonTypeをDictに割り当てる

DictのキーにNoneを割り当てようとしていますが、TypeErrorが発生します。

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()

それが私に割り当てさせる前に、しかしそうではありません。それはおかしい :/

12
Unistudent

例外は明確にTypeError: 'NoneType' object does not support item assignmentこれはself._roomsは実際にはNoneです

編集:あなたが自分で言ったように

self._rooms = {} 

または

self._rooms = dict()

あなたが口述をクリアするために必要なことをします

12
Jakob Bowyer

それを確認します self._roomsNoneではありません。

Noneを値としてdictのキーに割り当てると、実際には機能します。

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

ヤコブへのあなたのコメントを読んで、私は犯人がこの行であると収集します(投稿されていません)

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

d.clear()は、辞書d(および_self._rooms_)を所定の場所にクリアし、Noneを返します。したがって、すべて完了したと言えば、dは空の辞書であり、_self._rooms_はNoneです。

これに対する最もクリーンな解決策は次のとおりです。

_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!
_
1
mgilson

おそらくself._roomsについて不平を言っていますが、これはNoneだと思います。

0
NPE