调试您的第一个 Python 应用程序
找出问题的根源
请记住,在 上一教程 中,您已创建并运行了 Car 脚本? 让我们再多试一试它。
运行脚本 ,然后在 运行 工具窗口中输入相应的命令,使汽车加速一次,再制动两次:

现在先按 o ,再按 Enter ,以显示汽车的里程表:

脚本告诉我们,这辆车行驶了 0 公里! 这是一个出乎意料的结果,因为我们已经踩了一次油门,因此汽车应该行驶了一段距离。 让我们调试代码以找出其中的原因。
要开始调试,您必须先设置一个 断点。 调试器将在执行带有断点的那一行之前停止,您就可以检查程序的当前状态。
汽车的里程表在第 15 行设置,所以我们在那里设置一个断点。 点击装订区域中的行号:

接下来,在装订区域中点击 图标,该图标位于
main 子句旁边,然后选择 调试 'car'。

PyCharm 启动调试会话并显示 调试工具窗口。

先按 a ,再按 Enter ,使汽车加速。 调试器将执行脚本并在断点处停止。 将打开 调试 工具窗口的 线程和变量 选项卡。 展开 self 以检查变量的当前值:

在调试器工具栏上点击 (步过(O) ),以执行包含断点的那一行。 请注意,
odometer 的值变为 5,并且编辑器中的第 16 行现已高亮显示,因为下一步将执行它:

现在点击 (恢复 ),并在 调试 工具窗口中切换到 控制台 选项卡。 通过先按
b ,再按 Enter ,让汽车制动。 返回 线程和变量 选项卡并检查变量。 请注意, speed 此时为 0。

点击 并再次制动(
b + Enter)。 现在,切换到 线程和变量 选项卡,分析接下来会发生什么:

您可以看到, odometer 的值为 5, speed 的值为 -5。 因此,当我们恢复执行时, odometer 将变为 0。 您可以在工具栏上点击 来确认确实如此。
因此,出现意外结果的原因是 speed 变量为负值。
修复问题
为避免再次遇到相同问题,让我们更新 Car 的 brake ,使其不会将 speed 降至负值。
在 brake 方法中选择语句 self.speed -= 5 ,然后按 Ctrl+Alt+T ():

选择 if ,为该语句添加条件。
PyCharm 会创建一个存根 if 结构,留给您来填充适当的内容。

输入 self.speed >= 5。 我们在代码中指定, brake 方法应仅在其大于或等于 5 时,从 speed 中减去 5:

速度低于 5 时怎么办? 在现实生活中,当您刹一辆缓慢行驶的汽车时,它会直接停下。 让我们在代码中加以规定。
在 brake 方法的最后一行之后添加一行,然后开始键入 el...。 PyCharm 建议您插入 else。 按下 Enter 将其插入,缩进会自动修正:

现在添加 self.speed = 0 ,指定汽车应停止。 以下是 brake 方法的更新代码:
让我们再次 运行 ,检查是否已经修复了问题。 让汽车加速,然后制动两次,并检查里程表:

现在我们得到了预期且正确的结果。
详细调试
调试工具窗口包含用于 帧、 变量和 监视的专用窗格,以及用于显示所有输入与输出信息的 控制台 选项卡。 如果希望控制台始终可见,您可以将其拖动到 PyCharm 窗口的某个边缘。
单步执行
如果希望逐行查看代码的执行情况,无需在每一行都设置断点,您可以对代码进行单步执行。
让我们看看如何对示例程序进行单步执行。 使用窗口顶部的 运行 小部件启动或重新启动调试器:

在打开的调试器控制台中,按 a 使汽车加速。 调试器将在断点处停止。
我们可以使用 步进工具栏按钮来选择下一步要停在哪一行。

例如,点击 步过(O) 按钮 ,可以看到蓝色标记移动到下一行代码:

持续点击 ,直到到达
action = input("What should I do? [A]ccelerate, [B]rake, " "show [O]dometer, or show average [S]peed?").upper()。
现在,如果您点击 步入(I) 按钮 ,您会看到调试器进入文件 parse.py :

但是,如果继续使用 ,您会看到应用程序直接继续到下一个循环:

如果希望专注于自己的代码,请使用 步入我的代码 按钮 。 这样就可以避免单步进入库类。
监视
PyCharm 允许您监视任意变量。 只需在 线程和变量 选项卡上工具栏下方的 计算表达式或添加监视 字段中键入您想要监视的变量名称。 例如, my_car.time。 请注意,这里提供代码补全功能。 然后点击字段右侧边缘的 。

然后转到 控制台 选项卡,输入任意命令,例如 b。
返回 线程和变量 选项卡时,您将看到 my_car.time 的当前值:

有关更多信息,请参阅 监视。
内联调试
您可能已经注意到 PyCharm 的另一项功能,它可以让您轻松了解代码在做什么: 内联调试器。 只要命中任意断点,PyCharm 会在编辑器中直接显示许多变量的值:

此 内联调试 功能默认启用。 如果您未看到内联调试的值,请检查在调试器设置中是否已启用该功能。 在调试器工具栏上点击 ,并选择 调试器设置。 请确保已启用 在编辑器中显示变量值。

总结
就这样,您完成了! 恭喜您! 让我们借助 PyCharm 回顾一下您完成的操作:
找出问题的根源
设置断点
单步执行您的程序
创建监视
计算表达式