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

如何在PyCharm的Python环境中获取不含site-packages的简化stacktrace

Python+PyCharm场景下过滤site-packages栈追踪的实现方案

PyCharm原生JustMyCode配置(调试场景最优解)

PyCharm本身已经内置了完整的JustMyCode功能,无需额外编写代码,按以下步骤开启即可:

  • 打开PyCharm 设置(Settings) 面板,依次进入构建、执行、部署(Build, Execution, Deployment) → Python调试器(Python Debugger)
  • 勾选页面中的启用Just My Code选项,默认规则会自动过滤所有标准库、site-packages路径下的栈帧,调试时抛出的异常栈只会展示你自己编写的项目代码轨迹
  • 如果你有自定义的第三方路径需要额外过滤,可以在下方的框架排除列表(Frame Skipping)中手动添加路径匹配规则

代码层面全局过滤方案(非调试运行场景)

如果需要在非调试模式、日志打印等场景也输出过滤后的栈追踪,可以通过重写sys.excepthook实现全局生效的过滤逻辑,以下是可直接复用的实现:

import sys
import os
from traceback import extract_tb, format_list

# 配置项:替换为你自己的项目根目录绝对路径
PROJECT_ROOT = os.path.abspath(os.getcwd())
# 自动识别系统的site-packages、标准库路径
SITE_PACKAGES_PATHS = [p for p in sys.path if 'site-packages' in p or 'dist-packages' in p]
STD_LIB_PATH = os.path.dirname(os.__file__)

def just_my_code_excepthook(exc_type, exc_value, exc_traceback):
    # 提取原始栈帧
    raw_frames = extract_tb(exc_traceback)
    # 过滤非项目代码的栈帧
    filtered_frames = []
    for frame in raw_frames:
        frame_abs_path = os.path.abspath(frame.filename)
        # 仅保留项目根目录下、且不属于标准库/第三方库的栈帧
        if frame_abs_path.startswith(PROJECT_ROOT) \
                and not any(frame_abs_path.startswith(p) for p in SITE_PACKAGES_PATHS) \
                and not frame_abs_path.startswith(STD_LIB_PATH):
            filtered_frames.append(frame)
    # 格式化输出过滤后的栈追踪
    print("Traceback (most recent call last, JustMyCode filtered):", file=sys.stderr)
    for line in format_list(filtered_frames):
        print(line, end="", file=sys.stderr)
    print(f"{exc_type.__name__}: {exc_value}", file=sys.stderr)

# 替换全局异常处理钩子,所有未捕获异常都会走过滤逻辑
sys.excepthook = just_my_code_excepthook
  • 如果需要适配日志打印场景,可以把上述过滤逻辑集成到logging模块的异常格式化器中,打exception级别日志时自动输出过滤后的栈
  • 可根据自己的业务需求调整过滤规则,比如添加需要额外排除的私有依赖路径

第三方成熟工具方案

你可以直接使用better-exceptions库,它自带栈过滤、彩色输出、异常上下文变量展示等增强功能,安装后只需配置环境变量BETTER_EXCEPTIONS_SUPPRESS_MODULES=site-packages即可自动过滤所有第三方库的栈帧,完全兼容PyCharm运行/调试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:21:00