看懂报错:调试入门
约 10 分钟
报错是朋友不是敌人:初学时满屏红字很吓人,其实报错是 Python 在指路。读报错的口诀是——从最后一行往前看:最后一行说「什么错」,上面的箭头指「在哪一行」。NameError 是名字没定义,TypeError 是类型不对付,IndexError 是越界,第一章我们都踩过,现在是看懂它们的时候。
# ZeroDivisionError: division by zero
# 最后一行已经把话说完了:除数是零
print 调试法:程序结果不对?在关键位置 print 出中间值,像侦探沿路放记号——算到这一步时变量到底是什么。十个初学者的 bug,九个用三行 print 就能定位。专业的 debugger 也是这个思路,只是工具更高级。
try 是安全气囊:有些错误可以预见——比如读用户输入的数字,万一人家输了字母,float() 会炸。用 try 包住可能出错的几行,except 接住错误给个友好提示,程序就不会整个崩掉。处理真实数据文件时,try 是标配。
两类 bug 要分清:语法错误(程序根本跑不起来,好修)和逻辑错误(能跑但结果错,难查)。后者更危险——程序不喊疼,错得悄无声息,所以算完一定要拿「人脑能验算的小数据」对一对结果。
常见误区:看到报错就重跑一遍碰运气。报错信息几乎总包含答案,先读十秒钟,胜过瞎改十分钟。
练一练:故意写一个越界的列表访问,读报错找出「哪一行、什么错」,再修好它。
小纸条
故意制造一个 IndexError,读报错并修好
登录 后可看答案