1

对于某些消息,我相信没有“部分”组件。我认为下面的代码涵盖了大多数消息,但是在尝试获取某些消息时它仍然抛出一个 keyerror: 'data'。我查看了这些消息的 json 结果,它们都包含“数据”,不确定发生了什么。Traceback 显示 keyerror 来自包含“parts”的消息

追溯

Traceback (most recent call last):
File "gmail.py", line 168, in <module>
final_message_list.append(GetMessage(gmail_service, 'me', message_id))
File "gmail.py", line 150, in GetMessage
message_raw = message['payload']['parts'][0]['body']['data']

(在 GetMessage 内)

# Pull Raw Message Body from Response, some emails may not contain 'parts'

if 'parts' in message['payload']:
  message_raw = message['payload']['parts'][0]['body']['data']
else:
  message_raw = message['payload']['body']['data']
4

1 回答 1

0

经过一番调查,这是我目前能做的最好的,如果有人有更好的解决方案,请发布。

看起来导致失败的有问题的消息有一个附件,也许附件是什么弄乱了消息的结构。我已经看到附件消息的“部分”中的 mimeType 与非附件消息(文本/纯文本)不同(多部分/替代)。因此,我已经能够通过在尝试解析消息正文之前放置一个“if”语句来涵盖这种情况,如下所示。

 if 'parts' in message['payload']:

  if message['payload']['parts'][0]['mimeType'] == 'multipart/alternative':
    message_raw = message['payload']['parts'][0]['parts'][0]['body']['data']    
  else:
    message_raw = message['payload']['parts'][0]['body']['data']   

 else:
  message_raw = message['payload']['body']['data']
于 2014-07-22T22:52:42.957 回答