python-NoneType没有属性追加

我是Python的新手.我不明白为什么在代码中的某个时刻变量为None:

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 = [].还是其他问题?

更新:此代码有效:

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)

解决方法:

既然我对问题的评论似乎对此有答案,所以我将其重复作为答案,以期获得一些声誉点:

UserInRoom实例是否正确初始化?我不熟悉GAE数据模型,但是我可以想象,如果UserInRoom和Room之间存在关系(假设存在Room类),则实例的put()会要求设置room属性.

上一篇:向python2.1的backport函数修饰符


下一篇:在VB.NET和C#的语法之间进行系统,全面和完整的比较搜索