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

使用@try_catch装饰器时Python函数报错后无响应,而非抛出错误

问题分析与解决

你的装饰器出现“仅挂起无报错”的问题,核心原因有两个:

  • 裸except:捕获了所有异常(包括系统级终止异常),且未重新抛出,导致程序异常被“吞掉”,后续流程因异常状态无法正常推进,看起来像是挂起。
  • 未将具体异常信息传递给Print_Error(),如果该函数需要依赖异常上下文输出报错细节,就无法生成有效报错信息。

修复后的装饰器代码

def try_catch(func):
    def wrapper(*args, **kwargs):
        try:
            res = func(*args, **kwargs)
            return res
        except Exception as e:  # 替换裸except,避免捕获SystemExit等关键异常
            Print_Error(e)  # 将异常对象传入,让函数能输出具体错误
            raise  # 重新抛出异常,让程序感知错误并终止/处理
    return wrapper

关键修改说明

  1. 替换裸except为except Exception as e:避免捕获KeyboardInterrupt、SystemExit这类会终止程序的异常,防止程序无法正常退出。
  2. 传递异常对象给Print_Error():让Print_Error()能获取错误类型、内容、栈信息,输出有效的报错详情。如果你的Print_Error()原本就依赖异常上下文,也可以在except块内直接调用,此时异常上下文仍存在。
  3. 添加raise重新抛出异常:确保程序知道发生了错误,不会在异常被静默处理后继续执行无效逻辑,避免出现“挂起”现象。

补充:如果不需要重新抛出异常

如果你希望捕获异常后仅打印错误而不终止程序,至少要在Print_Error()里输出完整的异常栈信息,比如修改Print_Error():

import traceback

def Print_Error(e=None):
    if e:
        print(f"错误信息: {str(e)}")
        traceback.print_exc()  # 打印完整异常栈
    else:
        traceback.print_exc()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:32:21