2009-11-11 84 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

相關問題