如何让Python异常回溯仅显示自定义脚本文件的引用?
如何让Python回溯只显示自身脚本的文件引用?
当然可以实现,通过自定义异常处理逻辑过滤回溯栈即可,以下是两种实用方法:
方法一:全局替换异常钩子(推荐)
通过修改sys.excepthook,让所有未捕获的异常都自动过滤掉核心/第三方库的回溯帧:
import sys import traceback import os # 替换为你的脚本根目录(当前脚本所在文件夹) MY_SCRIPT_ROOT = os.path.abspath(os.path.dirname(__file__)) def filtered_excepthook(exc_type, exc_value, exc_traceback): # 提取回溯帧并过滤 filtered_frames = [] for frame in traceback.extract_tb(exc_traceback): frame_path = os.path.abspath(frame.filename) # 只保留脚本根目录下的文件 if frame_path.startswith(MY_SCRIPT_ROOT): filtered_frames.append(frame) # 打印过滤后的回溯信息 print("Traceback (仅显示自身脚本):") traceback.print_list(filtered_frames) print(f"{exc_type.__name__}: {exc_value}") # 应用自定义钩子 sys.excepthook = filtered_excepthook
方法二:局部捕获并过滤异常
如果只想针对特定代码块处理,可以在try-except中手动过滤回溯:
import sys import traceback import os MY_SCRIPT_ROOT = os.path.abspath(os.path.dirname(__file__)) try: # 这里写你的业务代码 raise RuntimeError("测试异常") except Exception as e: # 提取并过滤回溯帧 tb_frames = traceback.extract_tb(sys.exc_info()[2]) filtered_frames = [f for f in tb_frames if os.path.abspath(f.filename).startswith(MY_SCRIPT_ROOT)] # 输出结果 print("过滤后的回溯:") traceback.print_list(filtered_frames) print(f"{type(e).__name__}: {e}")
注意事项
MY_SCRIPT_ROOT必须是绝对路径,避免因工作目录变化导致过滤失效- 同目录下的子模块、脚本文件的回溯帧会被保留,符合需求
- 该逻辑仅过滤输出内容,不会改变异常本身的处理流程
内容的提问来源于stack exchange,提问作者jshibby
相关产品推荐
相关产品推荐

