python - NoneType 没有属性 Append

标签 python google-app-engine syntax

我是 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 = []。还是 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.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 数据模型,但我可以想象 put() 实例将需要设置 room 属性,如果有关系在 UserInRoomRoom 之间(假设存在一个 Room 类)。

关于python - NoneType 没有属性 Append,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595727/

相关文章:

java - 从 GAE 到 Google+ 的 XMPP 回复不起作用

语法错误 : identifier 'DXGI_RGBA in file dxgi1_2. h

c - 三元运算符中的所有参数都是强制性的还是你可以做 "(exp1 ? : value)"?

python - 是否有任何 App Engine 样板可用于在基本功能上节省时间?

python - 是否有处理分号的 parse_qs 的替代方法?

python - 由于numpy,pip安装apache-flink时出错

google-app-engine - GAE Apache Maven 插件的配置标签说明

mysql - 从 App Engine 连接到 Google Cloud SQL 时出现 ENOENT

scala - 什么是“?”符号(问号)在Scala中意味着什么?

python - mp3串流的python-proxy问题