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,你的程序就不再黑箱运行。

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

相关推荐
laocooon5238578866 分钟前
python 收发信的功能。
开发语言·python
爬山算法8 分钟前
Netty(19)Netty的性能优化手段有哪些?
java·后端
Tony Bai9 分钟前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
清水白石00812 分钟前
《Python 责任链模式实战指南:从设计思想到工程落地》
开发语言·python·责任链模式
沛沛老爹19 分钟前
Web开发者快速上手AI Agent:基于LangChain的提示词应用优化实战
人工智能·python·langchain·提示词·rag·web转型
宁大小白20 分钟前
pythonstudy Day39
python·机器学习
想用offer打牌22 分钟前
虚拟内存与寻址方式解析(面试版)
java·后端·面试·系统架构
拾贰_C23 分钟前
【VSCode | python | anaconda | cmd | PowerShell】在没有进入conda环境时使用conda命令默认安装位置
vscode·python·conda
無量26 分钟前
AQS抽象队列同步器原理与应用
后端
大千AI助手41 分钟前
基于OpenAPI生成的 SDK 的工业级和消费级概念区别
人工智能·python·机器学习·openai·代码生成·openapi·大千ai助手