Python 从电子邮件中提取正文时出现关键错误

Python 从电子邮件中提取正文时出现关键错误,python,gmail-api,Python,Gmail Api,对于某些消息,我认为没有“部件”组件。我认为下面的代码涵盖了大多数消息,但在尝试获取一些消息时仍然抛出一个keyrerror:“data”。我查看了这些消息的json结果,它们都包含“数据”,不确定发生了什么。回溯显示keyerror来自包含“parts”的消息 回溯 Traceback (most recent call last): File "gmail.py", line 168, in <module> final_message_list.append(GetMessag

对于某些消息,我认为没有“部件”组件。我认为下面的代码涵盖了大多数消息,但在尝试获取一些消息时仍然抛出一个keyrerror:“data”。我查看了这些消息的json结果,它们都包含“数据”,不确定发生了什么。回溯显示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']

经过一些调查,这是我目前能做的最好的,如果有人有更好的解决方案,请张贴

看起来导致失败的相关消息有一个附件,可能是附件稍微弄乱了消息的结构。我已经能够看到附件消息的“Parts”中的mimeType与非附件消息(text/plain)中的mimeType不同(multipart/alternative)。因此,在我尝试解析消息体之前,我只需放置一个“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']

除非我们能重现这个错误,否则我们无法知道这里发生了什么。你能试着在if语句之前打印
message
,这样当它失败时你就可以看到
message
里面的内容了。我找到了答案,这个失败的消息实际上有另一个称为“parts”的级别,其中包含“body”和“data”-解释这些差异的最佳方式是什么?如果您找到了解决方案,请尝试添加您自己的答案。未来的人们可能会有同样的问题。至于如何解释差异,只有阅读说明书才能解决这个问题。@BoppreH不,实际上我没有。无论出于何种原因,返回的JSON中的结构都有一些不同的设置,因此包含消息实际正文的“正文/数据”在每条消息中的位置可能会略有不同……我的问题是,解决这个问题的最佳方法是什么?也许是某种迭代循环,它沿着树向下搜索主体/数据,直到返回某个内容?我不确定,如果有人有更好的想法那就太好了。但是这个信息仍然是原始数据。如何以人类可读的格式查看消息正文?
 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']