Python调试技巧

164 投票
18 回答
372200 浏览
提问于 2025-04-15 15:22

你有什么好的建议来调试Python代码吗?

请不要仅仅列出某个调试工具,而不说它到底能做些什么。

相关内容

18 个回答

40

如果你在使用pdb(Python的调试工具),你可以为一些常用的命令设置快捷方式。这样可以让你更方便地使用。我自己用的是这些:

# Ned's .pdbrc

# Print a dictionary, sorted. %1 is the dict, %2 is the prefix for the names.
alias p_ for k in sorted(%1.keys()): print "%s%-15s= %-80.80s" % ("%2",k,repr(%1[k]))

# Print the instance variables of a thing.
alias pi p_ %1.__dict__ %1.

# Print the instance variables of self.
alias ps pi self

# Print the locals.
alias pl p_ locals() local:

# Next and list, and step and list.
alias nl n;;l
alias sl s;;l

# Short cuts for walking up and down the stack
alias uu u;;u
alias uuu u;;u;;u
alias uuuu u;;u;;u;;u
alias uuuuu u;;u;;u;;u;;u
alias dd d;;d
alias ddd d;;d;;d
alias dddd d;;d;;d;;d
alias ddddd d;;d;;d;;d;;d
78

http://pypi.python.org/pypi/pudb 是一个全屏幕、基于控制台的 Python 调试工具。

它的目标是把现代图形界面的调试器的所有好处,放到一个更轻便、适合用键盘操作的工具里。PuDB 让你可以在写代码和测试代码的地方直接调试,也就是在终端里。如果你用过很久以前的 DOS 系统下的 Turbo Pascal 或 C 工具,PuDB 的界面可能会让你觉得很熟悉。

pudb 截图

对于调试独立的脚本非常方便,只需要运行

python -m pudb.run my-script.py
139

PDB

你可以使用pdb这个模块,在任何地方插入pdb.set_trace(),这样就能设置一个断点。

>>> import pdb
>>> a="a string"
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) p a
'a string'
(Pdb)

要继续执行程序,可以使用c(或者contcontinue)。

使用pdb,你还可以执行任意的Python表达式。例如,如果你发现了错误,可以直接修改代码,然后输入一个表达式,这样在运行的代码中就能达到同样的效果。

ipdb是pdb的一个版本,专门为IPython设计。它让你在使用pdb时,能够享受到IPython的所有功能,包括自动补全。

你还可以设置pdb在遇到未捕获的异常时自动运行

Pydb是为了增强pdb而写的版本。有什么好处呢?

撰写回答