【发布时间】:2020-04-03 09:40:09
【问题描述】:
我有一个程序可以检查 Outlook 收件箱中是否有来自字典中特定发件人的附件。 Python - Outlook search emails within specific range only
该程序运行良好,现在我正在尝试扩展它,让用户能够从字典中选择特定发件人,以便只搜索他们的电子邮件。这段代码在之前的程序中。
我的字典是senderDict = {sender@address.com : Sender Name}
为了把它变成一个可供选择的值的菜单,我使用了枚举:
listSender = list(senderDict.values())
for count, item in enumerate(listSender,1):
print(count, item)
print("There are", len(listSender), "items.")
while True:
senderNum = int(input("Choose a sender (zero for any): "))
try:
if senderNum <= len(listSender) and senderNum >= 0:
#senderNum = int(input("Choose a sender (zero for any): "))
print("you chose", listSender[senderNum])
break
elif senderNum == 0:
print("Searching for any sender")
break
elif senderNum < 0:
print("Cannot choose a negative number.")
continue
except ValueError: #Not int
print("You did not enter a valid number (ValueError)")
input()
except IndexError: #outside range
print("You did not enter a valid number (IndexError)")
input()
问题是选择零将选择零索引,而不是“搜索任何”。如何使列表索引与枚举值匹配?
另外,输入非数字或空白输入会使程序崩溃,所以我不确定是什么异常,我认为它属于 ValueError。
我不确定是否需要将字典转换为列表,但我已经读过 enumerate 需要它才能工作,所以我就照做了。
【问题讨论】:
-
@shyamzzp “which” 在这种情况下是正确的。请不要根据风格偏好进行虚假更改。
标签: python python-3.x list dictionary enumerate