Python编程实战:用好 pdb 和 logging,程序再也不黑箱运行了

在 Python 的学习路径里,能跑出结果只是第一步;真正让一个人从"会写"走向"能干活"的,是是否掌握调试技巧。 调试能力强,你的开发速度会呈指数级提升------问题定位快、输出可控、线上稳定,这才是职业化的表现。

在 Python 中,最值得深入掌握的两个调试工具是:

  • pdb:交互式断点调试器
  • logging:可控、分级、可落盘的运行日志体系

这篇文章我们就系统聊一聊它们的核心使用方式。


一、为什么你必须学会调试?

初学者常见的开发方式是"打印调试"------哪错了就 print 一行,然后不停改代码反复跑。

这种方式有两个明显问题:

  1. 效率低:每改一次就得重新运行。
  2. 信息不全:看不到变量的真实状态、看不到调用栈。

pdb 和 logging 正是为了解决这些痛点,让你在开发和线上运维阶段都更得心应手。


二、pdb:像打游戏一样单步查看你的代码

pdb 是 Python 内置的命令行调试器,它允许你:

  • 在代码任意位置设置断点
  • 暂停执行
  • 查看变量
  • 单步运行
  • 跳过函数
  • 回溯错误上下文

简直是排查 bug 的神器。


1. 最简单的用法:pdb.set_trace()

在你怀疑有问题的地方插入:

python 复制代码
import pdb
pdb.set_trace()

执行时程序会在这一行停下来,并进入调试界面。


2. 调试常用命令(非常实用)

命令 作用
n next,执行下一行,不进入函数内部
s step,进入函数内部执行
c continue,继续执行到下一个断点
l list,查看当前执行区域的代码
p 变量名 查看变量的值
q quit,退出调试

举个简单例子:

python 复制代码
def calc(a, b):
    import pdb; pdb.set_trace()
    return a + b

print(calc(10, 20))

调试时你可以:

  • p a 查看参数
  • n 逐步往下跑
  • q 退出

调试体验类似 VSCode,但直接在终端即可完成。


3. 遇到异常自动进入 pdb

这个技巧非常实用:

bash 复制代码
python -m pdb your_script.py

当程序报错时会自动暂停在异常处,让你现场查看变量并回溯堆栈。

非常适合排查隐藏的边界问题、线上问题复现等场景。


三、logging:程序"自己写日记",方便你随时回溯

如果说 pdb 更适合开发阶段,那 logging 就是线上阶段的"黑盒记录器"。

print 只是把内容输出到控制台,但 logging 能做到:

  • 按严重级别打印日志
  • 输出到文件
  • 输出时间、行号、文件名、函数名
  • 灵活配置
  • 线上问题快速定位

真正的项目一定要用 logging,而不是满屏的 print。


1. logging 的基本用法

python 复制代码
import logging

logging.basicConfig(level=logging.INFO)

logging.info("任务开始")
logging.warning("数据格式异常,已跳过一条记录")
logging.error("数据库连接失败")

输出:

less 复制代码
INFO:root:任务开始
WARNING:root:数据格式异常,已跳过一条记录
ERROR:root:数据库连接失败

2. 日志级别说明(非常关键)

级别 适用场景
DEBUG 详细的调试信息,开发阶段最常用
INFO 程序正常运行的关键事件
WARNING 可疑,但程序还能继续
ERROR 错误,需要处理
CRITICAL 致命错误,程序即将终止

生产环境一般用 INFOWARNING


3. logging 输出到文件

python 复制代码
logging.basicConfig(
    level=logging.INFO,
    filename="run.log",
    format="%(asctime)s - %(levelname)s - %(message)s"
)

关键参数解释:

  • filename:指定日志文件
  • format:控制输出格式
  • asctime:打印时间
  • levelname:日志级别
  • message:日志内容

示例输出:

yaml 复制代码
2025-03-05 10:33:21,932 - INFO - 爬虫启动
2025-03-05 10:33:22,124 - WARNING - 请求延迟过高

这个格式在定位问题时非常有用。


4. 同时输出到文件和控制台

稍进阶一点:

python 复制代码
logger = logging.getLogger()

logger.setLevel(logging.DEBUG)

# 控制台输出
console = logging.StreamHandler()
console.setLevel(logging.INFO)

# 文件输出
file = logging.FileHandler("run.log")
file.setLevel(logging.DEBUG)

# 设置格式
formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
console.setFormatter(formatter)
file.setFormatter(formatter)

logger.addHandler(console)
logger.addHandler(file)

这是实际项目非常常见的日志配置方式。


四、pdb 与 logging 的结合:最佳实践

开发阶段: 用 pdb 精准定位问题。

上线阶段: 用 logging 持续记录程序运行行为。

现实开发中,常见调试流程就是:

  1. 通过 logging 定位哪块逻辑可能有问题
  2. 在对应代码加 pdb.set_trace()
  3. 单步查看变量是否异常
  4. 修复
  5. 清理断点,保留日志

水平提升非常明显。


五、总结

学会调试是一名 Python 工程师必须跨过的一道坎。 会用 pdb,你就不再盲看代码。 会用 logging,你的程序就不再黑箱运行。

两者结合,你在查问题、排障、优化性能、处理线上日志时都会变得轻松很多。 也正是这类能力,让一个开发者真正具备生产力和工程视角。

相关推荐
阿维的博客日记2 小时前
Hippo4j 线程池监控平台部署手册
java·spring boot·后端
万少3 小时前
AtomCode开发微信小程序《谁去呀》 全流程
前端·javascript·后端
GetcharZp3 小时前
Epic、暴雪都在用的 C++ 界面利器:Dear ImGui 零基础全景指南
后端
某人辛木4 小时前
Web自动化测试
前端·python·pycharm·pytest
C+++Python4 小时前
详细介绍一下Java泛型的通配符
java·windows·python
pixcarp4 小时前
知识库系统的内容资产闭环怎么设计
服务器·数据库·后端·golang
红尘散仙5 小时前
别再手动录屏了:用 VHS 给终端应用生成会动的文档素材
后端·rust
小帅热爱难回头5 小时前
编写Skill生成AI落地项目系统架构
python
diving deep5 小时前
脚本速览-python
开发语言·python
2601_951643777 小时前
Python第一,Java跌出前三,C语言杀回来了
java·c语言·python·编程语言排行·技术趋势