python调试需观察验证、快速定位:先读报错首行定类型,用print(repr())查中间状态,pdb.set_trace()交互调试,严查数据类型与结构。

Python 调试不是靠猜,而是靠观察和验证。关键在于快速定位问题源头,而不是反复修改再运行。
看报错信息别跳过第一行
Python 报错时,终端最上面那行(如 SyntaxError: invalid syntax 或 NameError: name 'x' is not defined)已经指明了错误类型和大致位置。不要直接翻到最后一行找“Traceback”,先读清错误名——它决定了排查方向:
- SyntaxError:检查冒号、括号、引号是否配对,缩进是否混用空格和 Tab
- NameError:变量或函数名拼写错误,或在定义前就调用了
-
TypeError:比如对字符串用
append(),或传了错误类型的参数 -
IndexError / KeyError:列表索引越界,或字典键不存在——加个
if key in dict:或用dict.get(key, default)
用 print 快速验证中间状态
别等 IDE 断点全配好才动手。在可疑逻辑前后加 print(repr(var))(repr 能显示空格、换行符、None 等隐藏字符),比 print(var) 更可靠:
- 函数输入输出是否符合预期?打印参数和返回值
- 循环里每次迭代的变量值是否异常?把 print 放进 for/while 内部
- 条件分支没走对?在 if/elif/else 每个分支开头都加一句 print
善用内置调试工具 pdb
不用装第三方包,Python 自带 pdb 就够用。在代码中想暂停的地方插入:
立即学习“Python免费学习笔记(深入)”;
import pdb; pdb.set_trace()
运行后会进入交互式调试界面,常用命令:
- n(next):执行下一行,不进入函数内部
- s(step):进入当前行调用的函数
- p var_name:打印变量值
- l(list):显示当前代码上下文
- c(continue):继续运行直到下一个断点或结束
检查数据类型和结构最容易被忽略
很多 bug 来自“以为它是 A,其实它是 B”。例如:
- 从 JSON 加载的数据,字符串数字可能还是 str 类型,不能直接做数学运算
- 用
re.findall()返回的是 list,不是字符串;re.search()返回的是 Match 对象,要 .group() 才能取值 - 函数返回 None 却当成有值用了——加一句
assert result is not None快速暴露问题
不确定时,随时敲 type(x) 和 print(x.__class__.__name__) 确认类型,用 pprint.pprint(data) 查看嵌套结构。










