Python 调试入门(小白友好版)

我把廖雪峰老师的调试教程彻底简化,用最通俗的话、最清晰的结构、最实用的例子整理好,小白也能一看就懂、一学就会!

一、先搞懂:什么是调试?

写代码时,程序报错、运行结果不对、逻辑出错,我们需要找到错误并修复,这个过程就叫调试(Debug)

Python 给我们准备了 5 种调试方法,从简单到高级,我按小白使用顺序讲:

  1. print () 打印法(最简单)
  2. assert 断言法(进阶版 print)
  3. logging 日志法(专业、不删代码)
  4. pdb 断点调试(命令行手动调试)
  5. IDE 图形调试(最舒服、工作常用)

二、5 种调试方法 思路 + 实例 + 解析

方法 1:print () 打印法(小白首选)

核心思路:把怀疑有问题的变量值打印出来,看看是不是你想要的。

优点:最简单、不用记任何语法缺点

实例代码
# 功能:用数字做除法,但是传入了 0,会报错
def foo(s):
    n = int(s)
    # 打印变量,看看 n 到底是多少
    print(">>> n =", n) 
    return 10 / n

def main():
    foo("0") # 故意传 0

main()
运行结果
>>> n = 0
ZeroDivisionError: division by zero

一眼就能看出:n 变成 0 了,所以除法报错!


方法 2:assert 断言法(自动检查)

核心思路:我,如果不成立,直接报错并提示我。 相当于:

语法assert 条件, "错误提示"

  • 条件为 True:正常运行
  • 条件为 False:直接报错

优点:比 print 干净,可一键关闭缺点

实例代码
def foo(s):
    n = int(s)
    # 断言:n 绝对不能等于 0
    assert n != 0, "n 不能是 0!"
    return 10 / n

def main():
    foo("0")

main()
运行结果
AssertionError: n 不能是 0!

一键关闭所有断言(正式运行程序时用):

python -O 文件名.py

方法 3:logging 日志法(企业最常用)

核心思路:把调试信息输出到日志,不报错、不污染运行结果,还能存文件。

最大优点

  • 不用删代码
  • 可以分级别控制输出
  • 可以存到文件里永久查看
实例代码(必背)
import logging
# 固定配置,加上就能输出日志
logging.basicConfig(level=logging.INFO)

s = "0"
n = int(s)
# 输出日志信息
logging.info(f"n 的值是:{n}")
print(10 / n)
##使用口诀
先写 import logging
再写 logging.basicConfig(level=logging.INFO)
想看变量就写 logging.info(f"变量={x}")

===完整标准用法(工作直接复制) 带格式 + 输出到文件(企业标准)

import logging

# 完整配置
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s",  # 日志格式
    ##%(asctime)s → 时间 ##%(levelname)s → 级别 ##%(message)s → 你写的内容
    ##连起来 = 漂亮专业的日志格式
    filename="run.log"  # 输出到文件!
)

# 测试
a = 10
b = 20

logging.debug("调试信息")
logging.info(f"计算 a + b,a={a}, b={b}")
logging.warning("这是警告")
logging.error("这是错误信息")
运行后:
控制台不输出
自动生成一个 run.log 文件
所有日志都保存在里面
===
运行结果
INFO:root:n 的值是:0
ZeroDivisionError: division by zero
日志级别(从低到高)
debug < info < warning < error

你设置什么级别,低于这个级别的日志就不显示,非常灵活!


方法 4:pdb 命令行调试(手动一步步走)

核心思路:让程序暂停,你可以手动查看变量、手动走下一步

两种用法:

  1. 命令行启动:python -m pdb 文件名.py
  2. 代码里加断点(更常用)
断点实例(最实用)
import pdb

s = "0"
n = int(s)
pdb.set_trace() # 程序运行到这里自动暂停
print(10 / n)
调试常用命令(背 3 个就够)
  • p 变量名 → 查看变量值
  • n → 走下一步
  • q → 退出调试
  • c → 继续运行到结束

方法 5:IDE 图形调试(最舒服)

核心思路:用鼠标点一点,就能设置断点、看变量、单步运行。

推荐工具

  • VS Code(免费)
  • PyCharm(专业好用)

使用步骤

  1. 代码行号左边点一下,出现红点(断点)
  2. 点击调试按钮运行
  3. 程序会在断点暂停
  4. 直接看左边变量面板,不用输命令

这是工作中最常用的调试方式!


三、5 种方法对比(速查表)

表格

方法难度优点缺点推荐场景
print()最简单要手动删除临时快速查错
assert⭐⭐自动检查多了乱简单逻辑校验
logging⭐⭐⭐专业、可存文件、不用删要配置项目开发、正式代码
pdb⭐⭐⭐⭐命令行万能调试麻烦、费手服务器无界面调试
IDE 调试可视化、舒服需要装软件平时写代码、工作

终极建议: 平时写代码用

正式项目用 logging


四、结构性总结(必背)

  1. 调试 = 找错 + 改错
  2. 最简单:print(变量)
  3. 自动检查:assert 条件, 提示
  4. 专业永久:logging(工作必用)
  5. 命令行手动:pdb.set_trace()
  6. 最舒服:IDE 图形调试

五、练习题(小白实战,带答案)

练习 1:print 调试

下面代码会报错,请用 print() 找出错误原因。

def divide(a, b):
    return a / b

print(divide(10, 0))

答案

def divide(a, b):
    print("b =", b) # 打印查看
    return a / b

print(divide(10, 0))

运行后看到 b=0,就知道是除 0 错误。


练习 2:assert 断言

给上面函数加断言,保证 b 不能为 0。

答案

def divide(a, b):
    assert b != 0, "除数不能是 0"
    return a / b

print(divide(10, 0))

练习 3:logging 日志

用 logging 输出变量值,不报错、不污染程序。

答案

import logging
logging.basicConfig(level=logging.INFO)

a = 10
b = 0
logging.info(f"a={a}, b={b}")
print(a / b)

练习 4:pdb 断点调试

在出错行前加断点,查看变量。

答案

import pdb

a = 10
b = 0
pdb.set_trace()
print(a / b)
===解析
import pdb          # 1. 导入调试库
a = 10              # 2. 给 a 赋值
b = 0               # 3. 给 b 赋值
pdb.set_trace()     # 4. ✨断点:程序在这里自动暂停!
print(a / b)        # 5. 这行还没执行
===走向
一、程序整体走向(超级清楚)
正常不走断点时:
1 → 2 → 3 → 4 → 5
真正运行时(有断点):
1 → 2 → 3 → 4(暂停,进入调试模式)
→ 你手动控制 → 5(报错)
===
pdb.set_trace () = 让程序在这行停住,等你检查变量,检查完再继续跑。

调试时输入:p b 就能看到 b=0


六、一句话总结

  • 临时查错用 print
  • 自动检查用 assert
  • 正式项目用 logging
  • 舒服调试用 IDE

你只要掌握 print + logging + IDE 调试,就能搞定 99% 的 Python 代码错误!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐