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

如何让pdb在Shell中不再隐藏异常回溯信息?

解决pdb执行语句时显示完整异常回溯的方法

1. 手动触发回溯(最简操作)

当你在pdb中执行语句触发异常后,直接输入pdb内置的traceback命令(可简写为tb),就能打印出该异常的完整回溯信息:

(Pdb) 1/0
ZeroDivisionError: division by zero
(Pdb) tb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

2. 自动显示回溯(永久生效配置)

如果想要让pdb始终自动输出异常回溯,无需每次手动输入命令,可以修改pdb的配置文件实现:

  • 创建或编辑用户目录下的.pdbrc文件(Windows系统路径为%USERPROFILE%\.pdbrc,Linux/macOS为~/.pdbrc)
  • 添加以下代码:
import pdb
# 保存pdb原有的命令执行方法
old_exec = pdb.Pdb.do_exec

def auto_show_traceback(self, arg):
    try:
        old_exec(self, arg)
    except Exception:
        # 自动打印回溯信息
        self.traceback()
        # 重新抛出异常,维持pdb的交互状态
        raise

# 替换原方法
pdb.Pdb.do_exec = auto_show_traceback

这段代码会替换pdb执行单行命令的默认逻辑,一旦执行语句抛出异常,就自动触发回溯打印,同时保留pdb的正常交互状态。

关于sys.exc_info()无效的原因

pdb在捕获你执行语句的异常后,内部会先处理(仅显示异常信息),并清理或覆盖了当前的异常上下文,因此sys.exc_info()无法获取到刚才那条语句触发的异常。而pdb的traceback命令是直接读取内部维护的当前执行异常信息,所以能正确输出完整回溯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:45:23