当前位置:首页>python>Python 调试技巧:从 print 到断点,效率提升 10 倍

Python 调试技巧:从 print 到断点,效率提升 10 倍

  • 2026-09-02 19:31:02
Python 调试技巧:从 print 到断点,效率提升 10 倍

"代码报错了,怎么调试?"

新手:print() 打印一切 高手:pdb + 断点 + 日志 大师:AI 辅助调试

今天分享 5 个 Python 调试技巧,每一个都能让你少加班 1 小时。


1️⃣ print() 进阶用法

❌ 新手写法:

print("x =", x)print("y =", y)print("result =", result)

✅ 高手写法:

# Python 3.8+ 的调试神器x = 42y = 100result = x + yprint(f"{x=}")      # x=42print(f"{y=}")      # y=100print(f"{result=}") # result=142# 一行打印多个print(f"{x=}, {y=}, {result=}")

为什么更好:

  • 自动显示变量名和值
  • 不用手动写变量名
  • 复制粘贴就能用

2️⃣ pdb 断点调试

基础用法:

import pdbdefcalculate(a, b):    pdb.set_trace()  # 在这里断点    result = a + breturn resultcalculate(10, 20)

运行后进入交互模式:

$ python script.py> script.py(4)calculate()(Pdb) n          # 执行下一行(Pdb) p a        # 打印变量 a(Pdb) p b        # 打印变量 b(Pdb) c          # 继续执行(Pdb) q          # 退出调试

常用命令:

命令
功能
n
执行下一行
s
进入函数
c
继续执行
p 变量
打印变量
l
显示代码
q
退出

3️⃣ logging 日志调试

❌ 新手写法:

print("开始执行")# ... 代码 ...print("执行完成")

✅ 高手写法:

import logging# 配置日志logging.basicConfig(    level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s')defprocess_data(data):    logging.debug(f"处理数据:{data}")try:        result = transform(data)        logging.info(f"转换成功:{result}")return resultexcept Exception as e:        logging.error(f"处理失败:{e}", exc_info=True)raise

日志级别:

logging.debug("调试信息")    # 详细调试logging.info("一般信息")     # 运行状态logging.warning("警告信息")  # 潜在问题logging.error("错误信息")    # 错误发生logging.critical("严重错误")  # 系统崩溃

4️⃣ 装饰器调试

调试函数执行时间:

import timefrom functools import wrapsdeftiming(func):    @wraps(func)defwrapper(*args, **kwargs):        start = time.time()        result = func(*args, **kwargs)        end = time.time()print(f"{func.__name__} 执行时间:{end-start:.4f}s")return resultreturn wrapper@timingdefslow_function():    time.sleep(1)slow_function()  # 输出:slow_function 执行时间:1.0012s

调试函数参数和返回值:

defdebug(func):    @wraps(func)defwrapper(*args, **kwargs):print(f"调用 {func.__name__},参数:{args}, {kwargs}")        result = func(*args, **kwargs)print(f"{func.__name__} 返回:{result}")return resultreturn wrapper@debugdefadd(a, b):return a + badd(3, 5)# 调用 add,参数:(3, 5), {}# add 返回:8

5️⃣ AI 辅助调试

把错误信息丢给 AI:

请帮我分析这个 Python 错误:Traceback (most recent call last):  File "script.py", line 15, in <module>    result = calculate(data)  File "script.py", line 8, in calculate    return sum(data) / len(data)ZeroDivisionError: division by zero代码:def calculate(data):    return sum(data) / len(data)data = []result = calculate(data)

AI 的回复:

# 问题分析:# data 是空列表,len(data) = 0,导致除零错误# 修复方案:defcalculate(data):ifnot data:  # 检查空列表return0# 或者抛出异常returnsum(data) / len(data)# 或者用异常处理:defcalculate(data):try:returnsum(data) / len(data)except ZeroDivisionError:return0# 或者 float('nan')

🎁 额外技巧:VS Code 调试

launch.json 配置:

{"version":"0.2.0","configurations":[{"name":"Python: 当前文件","type":"python","request":"launch","program":"${file}","console":"integratedTerminal","justMyCode":true}]}

调试操作:

  • F9:添加/删除断点
  • F5:开始调试
  • F10:单步执行
  • F11:进入函数
  • Shift+F11:跳出函数

📌 总结

场景
推荐方法
快速查看变量
print(f"{x=}")
复杂逻辑调试
pdb.set_trace()
生产环境问题
logging
性能分析
装饰器 @timing
疑难杂症
AI 辅助

记住:

调试不是浪费时间,是投资时间。


你最喜欢哪个调试技巧?评论区分享~

最新文章

随机文章