Django 在迭代获取特定值时获取AttributeError:sender

Django 在迭代获取特定值时获取AttributeError:sender,django,exchangelib,Django,Exchangelib,在exchange查询迭代时抛出获取“AttributeError:sender”。其他值(message_id等)也一样。此时,我唯一的选择是对其进行尝试/捕获,并需要在循环下重构大量内容。但是,我认为在正常情况下,查询不应该因为任何数据问题而崩溃。请告诉我可能出了什么问题。似乎有一个“坏”的电子邮件对象导致了它 kwargs = {"is_read": False} kwargs["datetime_received__gt"] = some_date

在exchange查询迭代时抛出获取“AttributeError:sender”。其他值(message_id等)也一样。此时,我唯一的选择是对其进行尝试/捕获,并需要在循环下重构大量内容。但是,我认为在正常情况下,查询不应该因为任何数据问题而崩溃。请告诉我可能出了什么问题。似乎有一个“坏”的电子邮件对象导致了它

kwargs = {"is_read": False}
kwargs["datetime_received__gt"] = some_date_time

filtered_items = my_exchange._service_account.inbox.filter(**kwargs)
filtered_items.page_size = 20

print(filtered_items.count())

3     <-- 3 objects

for sender_obj, msg_id, msg_subj, msg_text, msg_size in filtered_items.values_list("sender", "message_id", "subject", "text_body", "size").iterator():
    print(sender_obj)
    count = count + 1
    print(count)


Mailbox(name='Some User1', email_address='someuser1@myemail.acme', routing_type='SMTP', mailbox_type='Mailbox')
1
Mailbox(name='Some User2', email_address='someuser2@myemail.acme', routing_type='SMTP', mailbox_type='OneOff')
2

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py", line 273, in __iter__
    yield from self._format_items(items=self._query(), return_format=self.return_format)
  File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py", line 352, in _item_yielder
    yield item_func(i)
  File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py", line 380, in <lambda>
    item_func=lambda i: tuple(f.get_value(i) for f in self.only_fields),
  File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py", line 380, in <genexpr>
    item_func=lambda i: tuple(f.get_value(i) for f in self.only_fields),
  File "/usr/local/lib/python3.6/site-packages/exchangelib/fields.py", line 189, in get_value
    return getattr(item, self.field.name)
AttributeError: sender
kwargs={“is_read”:False}
kwargs[“datetime\u received\u gt”]=某个日期时间
filtered_items=my_exchange._service_account.inbox.filter(**kwargs)
过滤的项目。页面大小=20
打印(已筛选的\u items.count())

3看起来您正试图获取非消息的内容的
sender
字段。您的收件箱可能包含会议请求或其他非邮件对象

我不确定这是一个错误。对于没有
sender
字段的内容,获取
sender
属性的结果是什么


如果列表中只需要消息对象,可以尝试在
item_class='IPF上添加一个过滤器。注意“

基本上与我使用的大多数其他django模型一样,我假设给定表的字段出现在所有记录中,除非有任何反对意见。我没想到邮件id和发件人不在。因此,我在实现中没有考虑到这种情况。IPF.Note过滤器听起来很棒。我会用的。然而,我想知道是否应该在exchange查询端统一处理这一问题,因为标准的value_列表功能可能会像我的情况一样被破坏。谢谢。exchange文件夹由表支持的前提是错误的。不是,至少不是所有的“行”都有相同的形状。exchangelib也做出了这一假设。大多数情况下,它工作得出人意料地好,但有时会失败,比如在本例中。也就是说,我确实认为提高AttributeError有点奇怪。此外,在使用
values()
values\u list()
时,作为用户进行处理也不是一件小事,而且
only()
的行为并非如此。应该可以为您解决此问题。我删除非邮件的查询仅适用于{….'item_class':'IPM.Note'}而不适用于'IPF.Note'。(虽然这是一个输入错误(仍然可能是),但随后在exchange lib repo中搜索IPF.Note时出现了一些点击。在MSDN中也找不到任何文档参考。)如果可能,请在查询中添加一个过滤器示例,使用“item_class”:“IPM.Note”,以供需要的人使用。