2010-04-07 118 views
3

我是Python新手。我不明白爲什麼一個變量是None在某一個點在我的代碼:NoneType沒有屬性附加

class UsersInRoom(webapp.RequestHandler): 
    def get(self): 
     room_id = self.request.get("room_id") 
     username = self.request.get("username") 
     UserInRoom_entities = UserInRoom.gql("WHERE room = :1", room_id).get() 
     if UserInRoom_entities: 
      for user_in_room in UserInRoom_entities: 
       if user_in_room.username == username: 
        user_in_room.put() # last_poll auto updates to now whenenever user_in_room is saved 
     else: 
      user_in_room = UserInRoom() 
      user_in_room.username = username 
      user_in_room.put() 
      // error here, on line 160 
      UserInRoom_entities = [] 
      UserInRoom_entities.append(user_in_room) 

     # name is `user_at_room` intead of `user_in_room` to avoid confusion  
     usernames = [user_at_room.username for user_at_room in UserInRoom_entities] 
     self.response.out.write(json.dumps(usernames)) 

的錯誤是:

Traceback (most recent call last): 
    File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 507, in __call__ 
    handler.get(*groups) 
    File "path\to\chat.py", line 160, in get 
AttributeError: 'NoneType' object has no attribute 'append' 

這怎麼可能?在該呼叫之前,我正在設置UserInRoom_entities = []。或者是其他問題None有問題?

UPDATE:此代碼:

class UsersInRoom(webapp.RequestHandler): 
    def get(self): 
     room_id = self.request.get("room_id") 
     username = self.request.get("username") 
     UserInRoom_entities = UserInRoom.gql("WHERE room = :1", room_id).get() 
     if UserInRoom_entities: 
      for user_in_room in UserInRoom_entities: 
       if user_in_room.name == username: 
        user_in_room.put() # last_modified auto updates to now whenenever user_in_room is saved 
     else: 
      user_in_room = UserInRoom(room=Key(room_id), name=username) 
      user_in_room.put() 

      UserInRoom_entities = [] 
      UserInRoom_entities.append(user_in_room) 

     # name is `user_at_room` intead of `user_in_room` to avoid confusion  
     usernames = [user_at_room.name for user_at_room in UserInRoom_entities] 
     self.response.out.write(json.dumps(usernames)) 

class ChatRoom(db.Model): 
    name = db.StringProperty() 
    last_modified = db.DateTimeProperty(auto_now=True) 
    message_contents = db.StringListProperty() 
    message_users = db.StringListProperty() 

class UserInRoom(db.Model): 
    room = db.ReferenceProperty(ChatRoom) 
    name = db.StringProperty() 
    last_modified = db.DateTimeProperty(auto_now=True) 
+1

你確定這是同一行?你能驗證它嗎? – 2010-04-07 20:37:13

+1

你確定縮進是正確的嗎?它看起來不錯,但在真實代碼中可能不同。 – 2010-04-07 20:40:08

+0

@Felix PyDev告訴我縮進很好 @Noufal實際上它是'.append()'調用之前的兩行。這更加增加了我的困惑。 – 2010-04-07 20:43:37

回答

3

由於看來我的問題評論了這個問題的答案,我重複它作爲一個答案,以獲得一些信譽的希望要點:

UserInRoom實例是否正確初始化?我不熟悉GAE數據模型,但我可以想象,如果UserInRoomRoom(假設存在Room類)之間存在關係,則該實例將要求設置room屬性。

0

爲了確保你不是一個提高例外,你可以這樣做:

  UserInRoom_entities = [] 
      # raised? then your .append is missing otherwise something else is wrong 
      UserInRoom_entities.append 
      UserInRoom_entities.append(user_in_room) 
相關問題