Skip to main content
 首页 » 编程设计

python之Google App Engine 中的 KindError

2025年05月04日22yjmyzz

我在 GAE 中定义了一个简单的类来保存这样的用户配置文件数据:

class User(db.Model): 
    email = db.EmailProperty() 
    role = db.StringProperty(default=roles.USER) 
    first_name = db.StringProperty() 
    last_name = db.StringProperty() 
... 

我使用内存缓存来保存 session 信息。内存缓存数据如下所示 { 'key': 'agpjYW5kaXJhdGVzcgoLEgRVc2VyGCMM'}。我从 cookie 中获取 session_id 值。当我尝试像这样获取链接到该 cookie 的用户信息时:

session_id = request['session_id'] 
data = memcache.get(session_id) 
user = User.get(data['key']) 

我得到 KindError 异常:

KindError: Kind 'User' is not a subclass of kind 'User' 

我知道这个用户存在,内存缓存存在。用户类在我的项目中只定义了一次。为什么会出现此错误,我该如何让它工作?

更新:我尝试使用 db.get() 而不是 User.get() 并且成功了。那么,可能存在什么问题?

请您参考如下方法:

Model.get() 会检查提供的 key 是否属于正确的类型,如 documentation 中所定义的那样.如果类型不正确,它将抛出一个 KindError。

db.get() 不进行任何类型检查,因此如果提供的值存在于数据存储中,则会成功获取它,但不一定会返回用户实体。

因此您需要检查内存缓存中的键是否实际上是User 类型。您确定它在某个时候没有被其他模型的 key 覆盖吗?