第四阶段:进阶技能
第12章:错误调试与异常处理
目标:像侦探一样找出代码中的“小怪兽”(错误),用魔法盾牌(异常处理)保护程序!本章将教你用try-except魔法阵修复漏洞,并用IDLE的调试工具成为代码小医生!
12.1 常见错误类型解析
魔法目标:认识代码中的“小怪兽”,学会用放大镜(调试工具)观察它们!
魔法怪物图鉴
错误类型 | 怪物形象 | 常见场景 |
SyntaxError | 拼写错误的巫师 | 忘记冒号:或括号不匹配 |
NameError | 迷路的精灵 | 变量或函数名拼写错误 |
TypeError | 变形的魔法材料 | 数字和文字强行混合 |
IndexError | 穿越时空的幽灵 | 列表索引超出范围 |
趣味实验:
- 故意写错代码(如turtle.forward(100)漏掉括号),观察报错信息。
12.2 try-except魔法阵
魔法目标:用盾牌挡住错误攻击,让程序即使犯错也能优雅退场!
魔法咒语
# 基础防护罩(捕获所有错误)
try:
# 可能出错的代码
num = int(input("请输入数字:"))
print(10 / num)
except:
print("哎呀!输入有误,请重试!")
# 精准防护罩(指定错误类型)
try:
num = int(input("请输入数字:"))
except ValueError:
print("错误!请输入真正的数字!")
魔法原理:
- try块:放入可能出错的代码。
- except块:针对特定错误类型(如ValueError)或所有错误(不指定类型)编写补救措施。
趣味挑战:
- 设计“密码验证器”:允许用户输入密码3次,失败后用try-except提示错误。
12.3 调试工具与技巧
魔法目标:用IDLE的调试工具像放大镜一样观察代码运行细节!
IDLE调试四步法
- 启动调试器:
- 打开Python文件(如guess_number.py)。
- 点击菜单栏的 Debug → Debugger,打开调试窗口。
- 设置断点:
- 在代码行号左侧点击,设置“暂停按钮”(如guess = int(input())行)。
- 作用:程序运行到此处会暂停,方便观察变量值。
- 单步执行代码:
- Step Over(F10):逐行执行,跳过函数内部。
- Step Into(F11):进入函数内部查看细节(如int(input())如何转换输入)。
- 查看变量值:
- 在调试窗口的 Variables 面板中,实时查看num、secret等变量的变化。
实战案例:修复猜数字游戏
import random
def guess_number():
secret = random.randint(1, 100)
attempts = 0
while True:
try:
guess = int(input("猜一个1-100的数字:")) # 断点在这里
attempts += 1
if guess < secret:
print("太小啦!")
elif guess > secret:
print("太大啦!")
else:
print(f"恭喜!你用了{attempts}次猜中!")
break
except ValueError:
print("输入无效!请输入数字!")
guess_number()
调试步骤:
- 在guess = int(input())行设置断点。
- 输入非数字(如abc),程序暂停在断点处。
- 在Variables面板中发现guess未定义,说明错误原因。
- 修改代码添加try-except,再次调试验证修复效果。
为什么这样设计?
- 贴合教材结构:延续前三阶段内容,逐步深入错误处理与调试。
- IDLE工具可视化:通过图形界面操作,降低理解难度。
- 案例驱动学习:用猜数字游戏串联知识点,边玩边学。
附:IDLE调试速查表
操作 | 快捷键 | 作用 |
设置/取消断点 | F9 | 在当前行暂停程序 |
单步执行(跳过函数) | F10 | 逐行执行,不进入函数内部 |
单步执行(进入函数) | F11 | 进入函数内部查看细节 |
继续运行到下一断点 | F5 | 跳过当前断点继续执行 |
通过本章,你已经学会了用IDLE的调试魔法!记住:调试不是找错,而是和代码做朋友的过程