我在理解如何使用查詢結果時遇到問題。我問了大約6個問題,但我仍然不明白。我從前面的代碼中複製,並且讓它以某種方式工作,但是由於我不瞭解底層概念,所以如果我稍作改動,代碼就會崩潰。如果你能告訴我你是如何將這裏發生的事情形象化並向我解釋,我將非常感激。謝謝。IndexError:列表索引超出範圍(在查詢結果中)
class ReceiveEmail(InboundMailHandler):
def receive(self, message):
logging.info("Received email from %s" % message.sender)
plaintext = message.bodies(content_type='text/plain')
for text in plaintext:
txtmsg = ""
txtmsg = text[1].decode()
logging.info("Body is %s" % txtmsg)
logging.info("CC email is %s" % ((message.cc).split(",")[1]))
query = User.all()
query.filter("userEmail =", ((message.cc).split(",")[1]))
results = query.fetch(1)
for result in results:
result.userScore += 1
um = results[0]
um.userScore = result.userScore
um.put()
在這段代碼中,據我所知,查詢從cc列表中獲取第二個電子郵件地址並獲取結果。
然後,我通過增加1
接下來的userScore,我想更新在數據存儲這個項目,所以我說
um = results[0]
um.userScore = result.userScore
um.put()
但是,這給出了一個索引超出範圍的錯誤:
um = results[0]
IndexError: list index out of range
爲什麼?我在想象,results[0]
是結果的第零項。爲什麼它超出範圍?唯一我能想到的是,名單可能是None
。但我不明白爲什麼。它必須有1個被取出的物品。
另外,如果我試圖通過改變從[1] [0]
query.filter("userEmail =", ((message.cc).split(",")[0]))
然後我沒有得到IndexError
索引測試的第一個電子郵件地址。
我在這裏做錯了什麼?
謝謝!
編輯
看評論:
(message.cc).split(",")[0])
在電子郵件(從第二個電子郵件)的前留下了空間,因此查詢不匹配他們。
>>> cc.split(",")
['[email protected]', ' [email protected]', ' [email protected]']
加空格逗號解決了這一問題後:
>>> listcc = cc.split(", ")
>>> listcc
['[email protected]', '[email protected]', '[email protected]']
>>>
你有多確定有首次獲取結果? – 2010-11-21 04:23:34
是的,很好的問題。我從包含'user11 @ example.com'和'cc777 @ example.com'的cc字段開發者控制檯入站郵件發送電子郵件。我確定這兩封電子郵件已經在數據庫中,以便查詢可以獲取它們。但我只是再次嘗試索引0和1都不工作。你能提出任何方法來檢查查詢所見嗎?謝謝。 – Zeynel 2010-11-21 04:44:57
@Ignacio Vazquez-Abrams:你可能是對的;查詢出現失敗:如果結果: 結果爲在結果中: result.userScore + = 1 微米=結果[0] um.userScore = result.userScore um.put() 否則: logging.info (「查詢失敗」) – Zeynel 2010-11-21 04:57:53