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

Python多层被装饰函数异常重复打印 如何保留traceback且不返回None

解决方案

核心逻辑

异常会沿着调用栈逐层向上抛出,导致每一层的装饰器都会触发捕获逻辑。我们可以给已处理过的异常添加自定义标记,避免重复打印,同时完全保留原始traceback栈信息不影响调试。

修改后的装饰器实现

def error_wrapper(func):
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            # 仅当异常未被当前装饰器处理过时才打印
            if not hasattr(e, '_error_wrapped'):
                print(e)
                # 给异常添加处理标记
                setattr(e, '_error_wrapped', True)
            # 始终重新抛出,保留完整栈信息
            raise
    return wrapper

方案优势

  • 无需调整原有业务函数的调用逻辑,仅修改装饰器即可完成适配
  • 完整保留原始异常的traceback栈信息,调试时可以看到完整的调用链路
  • 兼容所有嵌套装饰的场景,同一条异常只会被打印一次

可选扩展方案

如果需要区分不同业务分组的异常打印逻辑,可以给标记属性添加分组标识,比如_error_wrapped_业务模块名,实现不同模块的异常打印隔离。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:51:02