You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在找到首个匹配供应商时终止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:10:45