Python 代码调试技巧

目录

Debug 是开发的重要技能,Python 提供多种调试工具和方法。

pdb 调试

pdb 是 Python 内置调试工具,提供交互式源代码调试功能。

常用命令

命令说明
break / b设置断点
continue / c继续执行程序
list / l查看当前行的代码段
step / s进入函数
return / r执行到函数返回
exit / q退出调试
next / n执行下一行
pp打印变量的值
help帮助

基本用法

import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print final

运行脚本会在 pdb.set_trace() 处暂停,可以用 n + Enter 单步执行。

调试函数

def combine(s1,s2):
    s3 = s1 + s2 + s1
    s3 = '"' + s3 +'"'
    return s3

a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = combine(a,b)
print final

在函数调用处用 s 命令进入函数体调试。

动态改变变量值

(Pdb) var = "1234"
(Pdb) !b="afdfd"

PyCharm IDE 调试

PyCharm 是功能完整的 Python IDE,支持多线程、远程调试。

  • 断点设置:在代码左侧边缘双击或 Ctrl+F8
  • 表达式求值:选中表达式,Run > Evaluate Expression
  • Variables 窗口:查看变量值
  • Watches 窗口:监测指定变量变化
  • 多线程支持:自动识别子线程,可分别调试

PyDev 调试

PyDev 是 Eclipse 的 Python 插件。

安装:在 Eclipse 中 Help > Install New Software,添加 http://pydev.org/updates

配置 Python 解释器:Window > Preferences > Pydev > Interpreter – Python

运行调试脚本时支持传入命令行参数。

日志调试

Python 内置 logging 模块,比 print 调试更灵活。

日志级别

Level用途
DEBUG详细信息,追踪问题
INFO正常信息
WARNING不可预见但不影响运行的问题
ERROR功能受影响的严重问题
CRITICAL程序无法继续运行

基本使用

import logging
logger = logging.getLogger('myapp')
logger.setLevel(logging.INFO)
handler = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info('normal infor')
logger.warning('warning info')
logger.error('error info')

日志对象

  • logger:程序信息输出接口
  • handler:处理信息输出(console、file、network)
  • formatter:日志格式
  • filter:决定哪些信息输出

日志支持层次继承关系,子 logger 名称为 parent.child 形式,适合大型项目的多模块日志管理。

总结

  • 小脚本:pdb 足够
  • IDE 开发:PyCharm 功能最完整
  • 大型项目:结合 logging 模块和 IDE,支持多线程、参数调试

#python