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()
それが私に割り当てさせる前に、しかしそうではありません。それはおかしい :/
例外は明確にTypeError: 'NoneType' object does not support item assignment
これはself._rooms
は実際にはNone
です
編集:あなたが自分で言ったように
self._rooms = {}
または
self._rooms = dict()
あなたが口述をクリアするために必要なことをします
それを確認します self._rooms
はNone
ではありません。
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!
_
おそらくself._rooms
について不平を言っていますが、これはNone
だと思います。