如何在找到首个匹配供应商时终止Python中的for循环?
问题描述
现有Excel文件Email Info.xlsx(包含Vendor列),以及多个以供应商名称命名的报告文件(文件名与Vendor列值对应)。当前DisplayExample函数会展示所有两个数据集中供应商匹配的邮件,需要修改代码使其在找到首个匹配项时终止for循环。
原代码
def DisplayExample(): # Load email info into dataframe try: now_date = datetime.today().strftime('%m-%d-%Y') # current date email_info = pd.read_excel(email_file_path) email_info.fillna('', inplace=True) outlook = win32.Dispatch('outlook.application') for index, row in email_info.iterrows(): mail = outlook.CreateItem(0) mail.To = row["Email"] mail.CC = row["CC"] mail.Subject = f"{row['Vendor']} - Report {now_date}" mail.Body = '' try: excel_file = f"{row['Vendor']}.xlsx" attached_excel_path = os.path.join(path, excel_file) mail.Attachments.Add(Source=attached_excel_path) except Exception as e: messagebox.showerror('Python Error', f"This vendor {row['Vendor']} doesn't match in Email Info and Report") mail.Display() # mail.Send() if something here...: break except Exception as e: messagebox.showerror('Python Error', e)
解决方案
核心思路是:当成功找到并附加对应供应商的报告文件(即确认匹配)时,展示邮件后立即用break终止循环,不再处理后续供应商。
修改后的代码如下:
def DisplayExample(): # Load email info into dataframe try: now_date = datetime.today().strftime('%m-%d-%Y') # current date email_info = pd.read_excel(email_file_path) email_info.fillna('', inplace=True) outlook = win32.Dispatch('outlook.application') for index, row in email_info.iterrows(): mail = outlook.CreateItem(0) mail.To = row["Email"] mail.CC = row["CC"] mail.Subject = f"{row['Vendor']} - Report {now_date}" mail.Body = '' try: excel_file = f"{row['Vendor']}.xlsx" attached_excel_path = os.path.join(path, excel_file) mail.Attachments.Add(Source=attached_excel_path) # 成功匹配,展示邮件后终止循环 mail.Display() # mail.Send() break except Exception as e: messagebox.showerror('Python Error', f"This vendor {row['Vendor']} doesn't match in Email Info and Report") # 匹配失败时跳过,继续遍历下一个供应商 except Exception as e: messagebox.showerror('Python Error', e)
修改说明
- 将
mail.Display()移至try块内部:只有成功附加报告文件(即找到匹配项)时,才会展示邮件。 - 在
mail.Display()后添加break语句:一旦找到首个匹配项,立即终止for循环,不再处理后续的供应商行。 - 若某个供应商匹配失败(无对应报告文件),会弹出错误提示,然后继续遍历下一个供应商,直到找到第一个匹配项为止。
内容的提问来源于stack exchange,提问作者TrungT
相关产品推荐
相关产品推荐

