Skip to main content
 首页 » 编程设计

python之使用 pdb,如何运行程序并在遇到错误时暂停

2025年05月04日18rubylouvre

使用 python 解释器和/或 pdb,我们可以运行程序并在遇到错误时暂停,以便我可以检查调用堆栈的所有帧崩溃时的程序?

当我直接在 python 解释器中运行一个程序时,遇到错误时,它会告诉它发生的代码行的位置,但它似乎返回到最顶层的框架,我无法检查实际发生错误的帧。例如

Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "test.py", line 194, in <module> 
    addlevel(root_toc, 0) 
  File "test.py", line 191, in addlevel 
    addlevel(child, root_level+1) 
  File "test.py", line 188, in addlevel 
    root.value.append(root_level) 
AttributeError: 'str' object has no attribute 'append' 
>>> root_level 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
NameError: name 'root_level' is not defined 

错误发生在最低帧,我无法在该帧检查 root_level 的值。是因为错误发生后返回到最顶层的帧吗?如何查看最低帧?

谢谢。

请您参考如下方法:

将 pdb 作为模块运行,传递要调试的脚本。它会在异常导出处中断。 (这在 the docs 中提到过。)

python -m pdb my_script.py 

如果你在解释器中,你可以使用pdb.pm()调试最后的回溯。


或者,使用 IPython 解释器。打字debug在未捕获的异常之后将进入 pdb session 以进行最后的回溯,类似于 pm()。