在Python中,语法错误可以被Python解释器发现,但逻辑上错误或变量使用错误却不容易发现,如果结果没有符合预期,则需要调试,一个很好的调试工具:Python自带的pdb模块。pdb是Python自带的调试模块。使用pdb模块可以为脚本设置断点、单步执行、查看变量值等。
pdb可以用命令行参数的方式启动,也可以使用import 将其导入后再使用。
>>> dir(pdb)
['Pdb', 'Repr', 'Restart', 'TESTCMD',.....,'re', 'run', 'runcall', 'runctx', 'runeval', 'set_trace', 'sys', 'test', 'traceback']
</div>
常见的pdb函数有以下几个:
【pdb.run()函数】
>>> 该函数主要用于调试语句块
>>> 基本用法如下
>>> help(pdb.run)
Help on function run in module pdb:
run(statement, globals=None, locals=None)
>>>参数含义
</div>
statement: 要调试的语句块,以字符串的形式表示
globals: 可选参数,设置statement运行的全局环境变量
locals: 可选参数,设置statement运行的局部环境变量
>>>简单示例
>>> import pdb # 导入调试模块
>>> pdb.run(''''' # 调用run()函数执行一个for循环
for i in range(3):
i *= 3
print(i)
''')
> <string>(2)<module>()
(Pdb) n # (Pdb)为调试命令提示符,表示可输入调试命令
> <string>(3)<module>()
(Pdb) n # n(next)表示执行下一行
> <string>(4)<module>()
(Pdb) print(i) # 打印变量i的值
0
(Pdb) continue # 继续运行程序
0
3
6
</div>
【pdb.runeval()函数】
>>>该函数主要用于调试表达式
>>>基本用法如下
>>> help(pdb.runeval)
Help on function runeval in module pdb:
runeval(expression, globals=None, locals=None)
</div>
>>> 参数含义
expression: 要调试的,
globals: 可选参数,设置statement运行的全局环境变量
locals: 可选参数,设置statement运行的局部环境变量
>>> 简单示例
>>> import pdb # 导入pdb模块
>>> lst = [1, 2, 3] # 定义一个列表
>>> pdb.runeval('lst[1]') # 调用runaval()函数来调试表达式lst[1]
> <string>(1)<module>()
(Pdb) n # 进入调试状态,使用n命令,单步执行
--Return--
> <string>(1)<module>()->2
(Pdb) n # 单步执行
2 # 返回表达式的值
>>> pdb.runeval('3 + 5*6/2') # 使用runaval()函数来调试表达式3+5*6/2
> <string>(1)<module>()->2
(Pdb) n
--Return--
> <string>(1)<module>()->18
(Pdb) n # 使用n命令单步执行
18 # 最后得出表达式的值
</div>
【pdb.runcall()函数】
>>>该函数主要用于调试函数
>>>基本用法如下
>>> help(pdb.runcall)
Help on function runcall in module pdb:
runcall(*args, **kwds)
</div>
>>> 参数含义
function: 函数名
args(kwds): 函数的参数
>>> 简单示例
>>> import pdb # 导入模块
>>> def sum(*args): # 定义函数sum,求所有参数之和
res = 0
for arg in args:
res += arg
return res
>>> pdb.runcall(sum, 1, 2, 3, 4) # 使用runcall调试函数sum
> <pyshell#53>(2)sum()
(Pdb) n # 进入调试状态,单步执行
> <pyshell#

