如何在Python异常输出末尾添加自定义业务提示信息?
问题场景
运行以下Python代码时会触发索引越界异常:
l = [1,2,3] index = 4 l[index]
默认控制台输出如下:
trace
IndexError: list index out of range
Process finished with exit code 1
需要在异常输出末尾追加自定义业务提示,最终输出效果为:
trace
IndexError: list index out of range
自定义业务提示(如:该异常发生于工作流X执行步骤Y时)
Process finished with exit code 1
尝试过重新抛出基于原异常的新异常,但会产生多余回溯信息;修改原异常的__str__、__repr__或args属性也无法达到预期效果。实际场景为工作流管理器运行第三方代码步骤,需保留原异常完整信息,仅追加业务提示。
解决方案
通过自定义sys.excepthook钩子函数实现需求,该函数负责处理未捕获的异常,我们可以先调用默认逻辑输出原异常信息,再追加自定义提示:
import sys def custom_excepthook(exc_type, exc_value, exc_traceback): # 输出原异常的完整回溯和错误信息 sys.__excepthook__(exc_type, exc_value, exc_traceback) # 打印自定义业务提示 print("自定义业务提示(如:该异常发生于工作流X执行步骤Y时)") # 替换默认的异常处理钩子 sys.excepthook = custom_excepthook # 执行第三方代码示例 l = [1,2,3] index = 4 l[index]
该方案的优势:
- 完全保留原异常的回溯信息和错误提示,无多余内容
- 仅在原异常输出后追加自定义信息,符合需求
- 无需修改原异常对象的任何属性,也不会重新抛出异常,避免引入新的问题
内容的提问来源于stack exchange,提问作者stam
相关产品推荐
相关产品推荐

