运行与调试
这是什么:断点调试 = 让程序在指定行「暂停」,然后逐行往下走,随时看每个变量的值。PyCharm 的调试器把这些做成了点点点的图形界面。
为什么用:程序结果不对时,普通人加十句 print 重跑十遍;会调试的人打一个断点,变量值一眼看穿——调试是新手到熟手的分水岭,本章是全教程最值钱的一章。
如何用:拿一段「结果不对」的代码,从打断点到定位 bug 完整走一遍。
一个有 bug 的程序
def discount_price(price: float, discount: float) -> float:
"""打折后价格:discount 传 0.8 表示八折"""
return price * discount * 10
print(discount_price(100, 0.8))
输出:
800.0
100 块打八折收你 800?正常该是 80.0。别改代码,先用调试器找出问题出在哪一步。
四步调出真相
① 打断点:点 return 那行行号左侧的空白,出现红点——程序跑到这会停。
② Debug 启动:右键代码 → 调试 '文件名'(或右上角小虫图标 / Shift+F9)。程序启动并停在断点行(高亮蓝底),底部切到调试面板。
③ 看变量:调试面板 变量(Variables) 区直接列着当前作用域的所有值:
price : 100.0
discount : 0.8
参数都正常——说明问题出在计算那一步。
④ 单步走:按 F8(步过)执行 return 行,面板立刻显示返回值:800.0。心算一下:100 × 0.8 × 10 = 800——多乘了个 10,bug 定位。
修复:return price * discount,再运行输出 80.0。全程没加一句 print。
调试器常用操作
| 操作 | 快捷键 | 干什么 |
|---|---|---|
| 步过 Step Over | F8 |
执行当前行,不进函数内部 |
| 步入 Step Into | F7 |
进入当前行调用的函数内部 |
| 步出 Step Out | Shift+F8 |
把当前函数执行完,回到调用处 |
| 继续 Resume | F9 |
放行到下一个断点(或结束) |
| 求值表达式 | Alt+F8 |
暂停时临时算个表达式,如 price * discount |
「求值表达式」是隐藏神器:暂停时按 Alt+F8,输入 price * discount 回车直接看到 80.0——试方案不用改代码重跑。
进阶:条件断点
循环跑几百次只想停在第 100 次?右键断点 → 输入条件,如 i == 100。程序只在条件成立时停下——大循环、批量处理的场景必会。
记忆口诀:红点一打
Shift+F9,Variables 里看真相;F8步过F7步入,Alt+F8现场算。
❓ 常见问题
Q1:按了 Debug 没停在断点?
确认右上角选中的运行配置就是要调的那个文件;再看断点红点是否被勾选禁用了(右键断点可启用/禁用)。
Q2:调试时程序自己跑完了?
那是按到了 F9(继续)。想重来直接再点一次 Debug——断点还在,不用重设。
Q3:带 input() 的程序能调试吗?
能:停在断点之前该输入还是要输入,流程和平时一样。
📝 本章小结
- 调试四步:打断点 →
Shift+F9→ 看 Variables →F8单步 - 步过
F8、步入F7、求值Alt+F8——三个键覆盖九成场景 - 调试器不是最后手段,是第一反应:结果不对,先断点再说话
- 条件断点专治大循环
动手改
- 把本章 bug 程序完整调一遍:断点 → 看变量 → 定位 → 修复 → 输出
80.0 - 写个
for i in range(10)循环,用条件断点只停在i == 5 - 给第 3 章的
hello.py打断点,体验input与调试并存