如何让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
相关产品推荐
相关产品推荐

