Python调试技巧全解析
立即解锁
发布时间: 2025-09-04 01:02:44 阅读量: 11 订阅数: 27 AIGC 

### Python调试技巧全解析
#### 1. 基于日志的调试方法
调试的本质是检测程序内部的运行情况,找出意外或错误的影响。一种简单而有效的方法是在代码的关键部分输出变量和其他信息,让程序员能够跟踪程序的执行流程。
##### 1.1 打印调试
这种方法最简单的形式是打印调试,即在调试时在特定点插入打印语句,以打印变量的值或程序执行的关键点。
##### 1.2 结合日志技术
将打印调试与日志技术相结合,可以创建程序执行的跟踪信息。这些跟踪信息在检测运行中的程序问题时非常有用,而且在使用测试框架运行测试时,通常也会显示日志。
##### 1.3 准备工作
从GitHub下载`debug_logging.py`文件:[链接](https://github.com/PacktPublishing/Python-Automation-Cookbook-Second-Edition/blob/master/Chapter13/debug_logging.py)。该文件实现了冒泡排序算法,其原理是多次遍历列表,在每次遍历中检查并交换相邻的两个值,使较大的值像气泡一样上升到列表的末尾。
```python
# 代码示例,检查排序结果
assert [1, 2, 3, 4, 7, 10] == bubble_sort([3, 7, 10, 2, 4, 1])
```
##### 1.4 调试步骤
1. **运行脚本并检查是否失败**:
```bash
$ python debug_logging.py
INFO:Sorting the list: [3, 7, 10, 2, 4, 1]
INFO:Sorted list: [2, 3, 4, 7, 10, 1]
Traceback (most recent call last):
File "debug_logging.py", line 17, in <module>
assert [1, 2, 3, 4, 7, 10] == bubble_sort([3, 7, 10, 2, 4, 1])
AssertionError
```
2. **启用调试日志**:修改`debug_logging.py`脚本的第二行,将日志级别从`INFO`改为`DEBUG`。
```python
# 原代码
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO)
# 修改后
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
```
3. **再次运行脚本**:此时会显示更多信息,发现列表的最后一个元素未排序。
```bash
$ python debug_logging.py
INFO:Sorting the list: [3, 7, 10, 2, 4, 1]
DEBUG:alist: [3, 7, 10, 2, 4, 1]
...
INFO:Sorted list : [2, 3, 4, 7, 10, 1]
Traceback (most recent call last):
File "debug_logging.py", line 17, in <module>
assert [1, 2, 3, 4, 7, 10] == bubble_sort([3, 7, 10, 2, 4, 1])
AssertionError
```
4. **分析并修复代码**:发现代码中存在越界错误,修改循环范围。
```python
# 原代码
for passnum in reversed(range(len(alist) - 1)):
# 修改后
for passnum in reversed(range(len(alist))):
```
5. **再次运行脚本**:此时程序正常运行。
```bash
$ python debug_logging.py
INFO:Sorting the list: [3, 7, 10, 2, 4, 1]
...
INFO:Sorted list : [1, 2, 3, 4, 7, 10]
```
##### 1.5 日志调试的优缺点
- **优点**:能够看到程序的执行流程,便于检查代码块的输出,理解程序的运行逻辑。
- **缺点**:可能会产生大量无用信息,需要在信息过多和过少之间找到平衡。
#### 2. 使用断点调试
Python内置了一个调试器`pdb`,通过设置断点可以在代码的任何位置暂停执行,进入命令行模式,分析当前状态。
##### 2.1 准备工作
从GitHub下载`debug_algorithm.py`脚本:[链接](https://github.com/PacktPublishing/Python-Automation-Cookbook-Second-Edition/blob/maste
0
0
复制全文
相关推荐










