У меня проблемы с пониманием работы с результатами запроса. Я задал около полдюжины вопросов по этому поводу, но до сих пор не понимаю. Я копирую из предыдущего кода и заставляю его работать как-то, но так как я не понимаю основную концепцию, код ломается, если я делаю небольшое изменение. Я был бы очень признателен, если бы вы сказали мне, как вы представляете себе, что здесь происходит, и объясните мне это. Спасибо.
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 и получает результат.
Затем я увеличиваю userScore на 1.
Далее я хочу обновить этот элемент в хранилище данных, поэтому я говорю
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
.
Что я здесь не так делаю?
Спасибо!
EDIT
Смотрите комментарии:
(message.cc).split(",")[0])
оставил пробел перед электронными письмами (начиная со второго письма), поэтому запрос не соответствовал им;
>>> cc.split(",")
['cc12@example.com', ' cc13@example.com', ' cc13@example.com']
добавление пробела после запятой устранило проблему:
>>> listcc = cc.split(", ")
>>> listcc
['cc12@example.com', 'cc13@example.com', 'cc13@example.com']
>>>