第49集:调试技巧

学习目标

  • 掌握基本的调试方法
  • 学会使用print调试
  • 理断点调试的概念
  • 掌握调试工具的使用
  • 学会分析错误信息

一、print调试

示例1:使用print输出变量

def calculate(a, b):
    """计算函数"""
    print(f"输入:a={a}, b={b}")  # 调试信息
    
    result = a + b
    print(f"中间结果:{result}")  # 调试信息
    
    return result * 2

print(calculate(5, 3))

示例2:跟踪函数执行

def process_data(data):
    """处理数据"""
    print("进入process_data函数")
    print(f"原始数据:{data}")
    
    result = [x * 2 for x in data]
    print(f"处理后数据:{result}")
    
    print("退出process_data函数")
    return result

process_data([1, 2, 3, 4, 5])

二、使用断言

示例3:基本断言

def divide(a, b):
    """除法函数"""
    assert b != 0, "除数不能为零"
    return a / b

print(divide(10, 2))
# print(divide(10, 0))  # 断言失败

示例4:断言检查

def get_score(score):
    """获取分数"""
    assert 0 <= score <= 100, "分数必须在0-100之间"
    
    if score >= 90:
        return "A"
    elif score >= 80:
        return "B"
    else:
        return "C"

print(get_score(95))
# print(get_score(105))  # 断言失败

三、错误信息分析

示例5:解读错误信息

# 示例错误
# Traceback (most recent call last):
#   File "test.py", line 5, in <module>
#     print(10 / 0)
# ZeroDivisionError: division by zero

解读错误信息的步骤

  1. Traceback:错误堆栈,显示错误发生的位置
  2. File: 错误发生的文件
  3. line: 错误发生的行号
  4. Error: 错误类型和描述

四、调试最佳实践

实践1:添加有意义的调试信息

def complex_calculation(data):
    """复杂计算"""
    print(f"[DEBUG] 开始处理数据,长度:{len(data)}")
    
    total = 0
    for i, item in enumerate(data):
        print(f"[DEBUG] 处理第{i}项:{item}")
        total += item
    
    print(f"[DEBUG] 计算完成,总和:{total}")
    return total

实践2:使用调试标志

DEBUG = True

def process_data(data):
    """处理数据"""
    if DEBUG:
        print(f"[DEBUG] 输入数据:{data}")
    
    result = [x * 2 for x in data]
    
    if DEBUG:
        print(f"[DEBUG] 输出数据:{result}")
    
    return result

五、课后练习

练习1

使用print调试一个复杂的函数。

练习2

使用assert验证函数的输入和输出。

练习3

分析一段错误代码,找出问题所在。

练习4

实现一个带有调试功能的函数。

练习5

学习使用IDE的调试工具。

« 上一篇 自定义异常 下一篇 » 第一阶段综合项目