2012-05-16 30 views
7

Tôi cố gắng để gán Không để một chìa khóa trong dict, nhưng tôi nhận được một Lỗi Loại:Gán NoneType để dict

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

Mã của tôi là ở đây:

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

Trước khi nó sẽ cho phép tôi chỉ định, nhưng không phải vậy. Nó là lạ:/

+0

Câu hỏi hay +1, bạn đã đặt một câu hỏi rõ ràng, đã cho chúng tôi một đoạn mã mà không làm tràn ngập chúng tôi và cho chúng tôi một dấu vết rõ ràng! –

+0

Điều này có vẻ khá giống với bài đăng này ngày hôm qua, http://stackoverflow.com/questions/10600746/python-loading-file-dictionary. Đây có phải là bài tập về nhà không? – Kafonek

+0

Ngoài ra, hãy cẩn thận ở đây. Stackoverflow không phải là tốt đẹp để chỉnh sửa mã python - Sự thụt đầu dòng của bạn giữa hai dòng đầu tiên không hoàn toàn đúng;) - Nếu tôi có một nickle cho mỗi lần thụt lề python của tôi là sai trên SO, tôi có thể có một vài đô la bây giờ ... – mgilson

Trả lời

8

Trường hợp ngoại lệ nêu rõ TypeError: 'NoneType' object does not support item assignment này gợi ý rằng self._rooms thực sự là None

Edit: Như bạn nói mình

self._rooms = {} 

hoặc

self._rooms = dict() 

sẽ làm những gì bạn cần phải xóa dict

+1

Hoặc nhiều khả năng, 'self._rooms [g [0]]', vì không có đối tượng "NoneType" không thể đăng ký "Loại lỗi được nâng lên. – chepner

+3

Thử 'Không có [3] = 4' Trong thông dịch viên của bạn, bạn sẽ nhận được cùng một ngoại lệ chính xác ^^ –

+1

Ah, đó có thể là nó. – Unistudent

0

Có thể bạn đang phàn nàn về self._rooms, điều tôi nghi ngờ là None.

0

Kiểm tra xem self._rooms không phải là None.

Gán None như một giá trị cho chính một dict 's thực sự hoạt động:

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

Từ đọc ý kiến ​​của bạn để Jakob, tôi thu thập rằng thủ phạm là dòng này (không được đăng)

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

d.clear() sẽ xóa từ điển d (và self._rooms) tại chỗ và trả lại None. Vì vậy, tất cả đã nói là xong, d là từ điển trống và self._roomsNone.

Giải pháp sạch nhất cho điều này là:

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

đặc biệt là kể từ khi self._rooms dường như đã thừa hưởng từ dict - vì vậy nó có thể có các thuộc tính khác mà bạn không muốn để mất bằng cách thực hiện:

self._rooms={} #Now this is just a dict, no longer has `set_guest` method! 
Các vấn đề liên quan