Skip to content

02-调试技巧

本章讲解 Python 调试的工具和技巧。


f-string 调试

python
# Python 3.8+
name = "Alice"
age = 30

print(f"{name=}")  # 输出:name='Alice'
print(f"{age=}")   # 输出:age=30
print(f"{len([1,2,3])=}")  # 输出:len([1,2,3])=3

assert 断言

python
def calculate_discount(price: float, discount: float) -> float:
    # 参数验证
    assert price >= 0, "Price must be non-negative"
    assert 0 <= discount <= 1, "Discount must be between 0 and 1"

    final_price = price * (1 - discount)
    return final_price

pdb 调试器

基础用法

python
import pdb

def buggy_function(x, y):
    result = x + y
    pdb.set_trace()  # 设置断点
    result = result * 2
    return result

常用命令

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

breakpoint() 快捷方式

python
# Python 3.7+
def process_data(data):
    breakpoint()  # 等价于 pdb.set_trace()
    return data * 2

高级调试工具

ipdb(增强版 pdb)

bash
uv add --dev ipdb
python
import ipdb
ipdb.set_trace()

rich 调试

bash
uv add --dev rich
python
from rich import print
from rich.traceback import install

install()  # 安装富 traceback

异常调试

捕获和记录异常

python
import logging

logger = logging.getLogger(__name__)

def risky_operation():
    try:
        result = do_something()
        return result
    except Exception as e:
        logger.exception("Operation failed")
        raise

调试最佳实践

✅ 推荐做法

  1. 使用 logging 而非 print
  2. 在生产环境禁用 assert
  3. 记录异常时包含完整堆栈
  4. 使用断点缩小问题范围

❌ 避免

  1. 在生产代码中遗留断点
  2. 使用空的 except 块
  3. 忽略异常不处理

本章小结

┌─────────────────────────────────────────────────────────────┐
│                    调试技巧 知识要点                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   基础调试:                                                 │
│   ✓ f-string 调试:{name=}                                  │
│   ✓ assert 断言验证                                         │
│                                                             │
│   pdb 调试器:                                               │
│   ✓ breakpoint() 设置断点                                   │
│   ✓ n/s/c/l/p 命令                                          │
│                                                             │
│   高级工具:                                                 │
│   ✓ ipdb 增强调试                                           │
│   ✓ rich 美化输出                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘