首页 > 解决方案 > 使用 IMAPClient 在列表循环中的 for i 中的列表索引超出范围?

问题描述

我不确定我是否遗漏了一些明显的东西。我正在尝试检索电子邮件并对其进行迭代以查找文本中的特定项目。代码运行但在迭代所选文件夹中的项目的过程中会引发“列表索引超出范围”错误。当被迭代的列表是要使用的索引位置列表时,我不明白怎么会发生这种情况?

我正在使用 IMAPClient 包,我的脚本选择了正确的文件夹,并找到具有特定主题的电子邮件,然后返回一个列表

client.select_folder('WebsiteMessages', readonly=True)
result = client.search('SUBJECT "User Details"')
print(result)

这将返回文件夹中与搜索条件匹配的项目列表

 [1, 2, 9, 10, 11, 15, 19, 22, 23, 24, 25, 26, 27, 28, 30, 32, 36, 46, 48, 49, 51, 55, 57, 60, 61]

如果我尝试遍历该列表,我会到达一个特定点,然后得到列表索引超出范围错误。

for i in result:
    message = client.fetch(result[i], b'RFC822')
    print(message)

我不明白当列表是由搜索生成时,错误是如何发生的?有任何想法吗?

标签: python-3.xoutlookimapclient

解决方案


未经测试,只是猜测:

for i in result:
    message = client.fetch(i, b'RFC822')
    print(message)

i已经是该值,将其用作该值的索引是不正确的。

第二种解决方案,这可能是您想要的:

for i in range(result):
    message = client.fetch(result[i], b'RFC822')
    print(message)

推荐阅读