2009-11-11 77 views
0

我想提前说我是python的新手,并且是python平台的GAE。我一直在寻找这个非常奇怪的错误/错误,当我试图让一个实体使用它的密钥ID ... 这是我做的,谷歌应用程序引擎中的奇怪错误

我正在查询数据存储实体模型UserDetails的用户对应的密钥名称从UI中检索。

src_key_str = db.GqlQuery('SELECT __key__ FROM UserDetails WHERE user_name = :uname', uname = src_username).fetch(1) 
for itr1 in src_key_str: 
      src_key = itr1.id_or_name() 

然后使用src_key获得我试图获得相应的实体相同。

accounts = UserDetails.get_by_id(src_key) 

现在在这里,当我尝试使用self.response.out.write(accounts.user_name)访问帐户的属性,我得到一个错误​​。考虑到帐户实际上是一个列表,我尝试使用accounts[0]获得第一个元素,现在我得到list out of bound error

当我尝试硬编码src_key值时,它工作得很好,但是,当我将值传递给同一个方法时,我得到这些错误。我不明白为什么GAE在生产环境和开发环境中表现如此。我是否缺少关于此行为的一些信息?

编辑:将堆栈跟踪,

Traceback (most recent call last): 
    File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 507, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/bulkloader160by2/1-5.337673425692960489/new_main.py", line 93, in get 
    self.response.out.write(accounts.user_name) 
AttributeError: 'list' object has no attribute 'user_name' 
+0

我们需要完整的堆栈跟踪。您展示的例外情况不会发生在您粘贴的代码中。 – 2009-11-11 10:16:08

+0

按要求添加堆栈跟踪。 – Arun 2009-11-11 10:20:47

回答

1

因为“账户”是一个列表,而不是一个单一实例你得到这个错误。基于您的代码,我不明白为什么会这样,但尝试做如下:

src_key = db.GqlQuery('SELECT __key__ FROM UserDetails WHERE user_name = :uname', uname = src_username).get() 
if src_key: 
    account = UserDetails.get(src_key) 

有没有理由骂.fetch()时,你只需要一个对象,但也没有提取id的原因,只是将它传递给.get_by_id。事实上,如果你已经显示的片段是你在做什么,简单和快捷是:

account = db.GqlQuery('SELECT * FROM UserDetails WHERE user_name = :uname', uname = src_username).get() 
+0

如果'accounts'是一个如你所建议的列表,那么我认为当我在'accounts = UserDetails.get_by_id(src_key)'下面调用'accounts [0]'时,我不应该得到列表超出界限的错误',但是我正如我在我的问题中提到的那样。 – Arun 2009-11-11 10:59:15

+0

如果accounts是一个空列表,那么outbound绑定的错误正是您为'accounts [0]'获得的错误。如果它不是一个列表,你会得到一个_different_错误试图索引它。 – 2009-11-11 11:35:03