python基础入门:附录:调试技巧(pdb断点、日志记录)

Python调试全攻略:从断点调试到日志分析实战指南

一、PDB断点调试技巧
  1. 基础调试命令速查表
# 在代码中插入断点
import pdb; pdb.set_trace()  # Python 3.7之前
breakpoint()                 # Python 3.7+新语法

# 调试会话中常用命令:
'''
n(ext)       执行下一行
s(tep)       进入函数
c(ontinue)   继续执行到下一个断点
l(ist)       显示当前代码上下文
p <变量名>    打印变量值
w(here)      显示调用堆栈
q(uit)       退出调试器
!            执行Python语句(如!a=5)
b <行号>      设置新断点
'''
  1. 实战调试场景
def calculate_stats(data):
    total = sum(data)
    avg = total / len(data)  # 可能除零错误
    breakpoint()  # 检查中间值
    return {
   
        'total': total,
        'average': avg,
        'max': max(data)
    }

# 调试过程示例
(Pdb) p data  # 查看输入数据
(Pdb) len(data)  # 检查长度
(Pdb) !data.append(10)  # 动态修改数据
(Pdb) c  # 继续执行
  1. 高级调试技巧
# 条件断点设置
import pdb

def process_item(item):
    if item['value'] > 100:  # 只调试大额交易
        pdb.set_trace()
    # 处理逻辑...

# 调试器初始化脚本
# .pdbrc文件内容:
# alias pl pp [x for x in locals().items() if not x[0].startswith('_')]
# alias bt w
二、日志记录最佳实践
  1. 基础日志配置模板
import logging
from logging.handlers import RotatingFileHandler

def setup_logger(name='app'):
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
  
    # 控制台Handler
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
  
    # 文件Handler(自动轮换)
    file_handler = RotatingFileHandler(
        'app.log', maxBytes=1e6, backupCount=5
    )
    file_handler.setLevel(logging.DEBUG)
  
    # 日志格式
    formatter = logging.Formatter(
        '%(asctime)s | %(name)s | %(levelname)s | %(message)s'
    )
    console.setFormatter(formatter)
    file_handler.setFormatter(formatter)
  
    logger.addHandler(console)
    logger.addHandler(file_handler)
    return logger

# 初始化日志
logger = setup_logger()
  1. 结构化日志实践
# 使用extra参数记录上下文
def process_request(request):
    logger.info(
        'Request received',
        extra={
   
            'ip': request.remote_addr,
            'method': request.method,
            'path': request.path
        }
    )
  
# 配置JSON格式日志
from pythonjsonlogger import jsonlogger

json_formatter = jsonlogger.JsonFormatter(
    '%(asctime)s %(name)s %(levelname)s %(message)s %(ip)s %(method)s'
)
  1. 日志过滤与分级
# 创建敏感信息过滤器
class SensitiveDataFilter(logging.Filter):
    def filter(self, record):
        if 'password' in record.getMessage().lower(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵鑫亿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值