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

Tkinter捕获mainProcess全量异常并弹出成功/错误提示的实现方法

Tkinter mainProcess 全局异常捕获实现方案

直接用Python标准try/except/else结构包裹全量业务逻辑即可,能覆盖Excel读写、pandas运算、文件导出全链路的所有运行时错误,同时准确区分执行失败/成功两种场景弹出对应提示。

改造要点

  • 所有业务逻辑放在try块内,仅捕获继承自Exception的运行时异常,不会拦截系统退出、键盘中断这类系统级异常,避免程序无法正常关闭
  • 异常触发时走except分支,弹出带具体错误信息的错误提示
  • 仅当try块内代码全程无异常执行完毕时,才会走else分支弹出成功提示
  • 修复原代码逻辑漏洞:文件名空值校验后增加return终止流程,避免弹完空名提示后继续执行导出操作触发无意义报错

改造后完整代码

import traceback
# 依赖前置说明:需提前导入pandas、numpy,且已将tkinter.messagebox导入为m_box

def mainProcess():
    try:
        df1 = pd.read_excel(fileA)  # FILE TRANSAKSI BULANAN
        df2 = pd.read_excel(fileB)  # FILE ADMIN TRANSAKSI
        df3 = pd.read_excel(fileC)  # FILE AKHIR / INPUT

        # 计算Propose值
        df1.rename(columns={'agent_id':'AGENT_ID'}, inplace=True)
        df1.rename(columns={'description':'Nama Produk'}, inplace=True)
        df4 = pd.merge(df1, df2[['Nama Produk', 'Nilai Propose']], on='Nama Produk', how='left')

        # 计算Agent固定输入值
        df4 = df4.groupby(by="AGENT_ID").sum()[["Nilai Propose"]]
        df4["Korgen_40%"] = df4["Nilai Propose"] * 0.4
        df4["Agent_60%"] = df4["Nilai Propose"] * 0.6
        df4["Korlap_10%"] = df4["Agent_60%"] * 0.1
        df4["Agent_Recieved"] = df4["Agent_60%"] - df4["Korlap_10%"]
        df4["Fix_Input_Agent"] = np.floor(df4["Agent_Recieved"])
        df4.reset_index(inplace=True)

        # 数值写入目标文件
        df5 = pd.merge(df3, df4[['AGENT_ID','Fix_Input_Agent']], on='AGENT_ID', how='left')
        df6 = df5['Fix_Input_Agent'].fillna(value=0)
        df3["TRANSFER_VALUE"] = df6

        NamaFile1 = alterName1.get()  
        NamaFile2 = alterName2.get()  

        if NamaFile1 == '' or NamaFile2 == '':
            m_box.showerror('Caution', 'Nama File Tidak Boleh Kosong')
            return  # 空文件名直接终止后续流程,避免无效执行

        df4.to_excel(f"{NamaFile1}.xlsx", index=False)
        df3.to_excel(f"{NamaFile2}.xlsx", index=False)
    except Exception as e:
        # 错误提示带完整堆栈,方便定位问题
        error_detail = f"执行出错:\n{str(e)}\n\n错误定位:\n{traceback.format_exc()}"
        m_box.showerror('执行失败', error_detail)
    else:
        m_box.showinfo('执行成功', 'Excel处理与导出已全部完成!')

注意事项

  • 引入traceback模块是为了在弹窗中直接展示错误的完整调用链,不用切回控制台翻日志就能快速定位问题(比如是源文件不存在、列名不匹配、文件被占用无写入权限等),如果不需要展示详细堆栈,直接在错误提示里放str(e)即可
  • 禁止使用裸except:写法,这种写法会捕获包括KeyboardInterrupt(Ctrl+C终止程序)、SystemExit(程序主动退出)在内的所有异常,会导致程序无法正常退出

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:57:20