在 PyCharm 中调试你的第一个 Python 应用程序

2025-03-27 11:22 更新

找出问题的根源

还记得在上一个教程中,你创建并运行了 Car 脚本吗?让我们再和它玩一会儿。

在运行工具窗口中运行脚本,加速一次汽车,然后通过输入相应的命令进行两次制动:

运行脚本

现在按 o 然后按 Enter 来显示汽车的里程表:


运行脚本


脚本告诉我们汽车行驶了 0 公里!这是一个意外的结果,因为我们按了一次加速器,所以汽车应该已经行驶了一段距离。让我们调试代码以找出原因。


要开始调试,你必须先设置一个断点。调试器将在执行带有断点的行之前停止,这样你就可以检查程序的当前状态。


汽车的里程表设置在第 15 行,所以让我们在那里设置一个断点。点击行号旁边的空白处:


添加断点


接下来,点击 main 子句旁边的 app 图标,然后选择调试 'car'(Debug `car`)。


Debug 命令


PyCharm 开始调试会话并显示调试工具窗口。


Debug tool 窗口


a 然后按 Enter 来加速汽车。调试器将执行脚本并在断点处停止。调试工具窗口的线程和变量标签页将打开。展开 self 以检查变量的当前值:


检查变量的当前值


点击调试工具栏上的  app “单步跳过(Step Over)” 按钮,以执行带有断点的行。注意 ​里程表(odometer​ 的值变为 5,第 16 行现在在编辑器中高亮显示,因为它将是下一个要执行的行:


单步执行


现在点击  继续按钮 “继续(Resume)” 按钮并切换到 Debug 调试工具窗口的控制台标签页。通过按 b 然后按 Enter 来指示汽车制动。回到线程和变量标签页并检查变量。注意此时速度为 0。


检查变量


再次点击 继续按钮 “继续” 按钮并再次制动(b + Enter)。现在,让我们切换到线程和变量标签页并分析接下来会发生什么:


检查变量的值


你可以看到,里程表 的值是 5,速度 的值是 -5。这就是为什么当我们恢复执行时,里程表 将变为 0。你可以点击工具栏上的  app 按钮来确认这一点。

所以,意外结果的原因是 速度(speed) 变量的负值。

修复问题

为了避免再次遇到同样的问题,让我们更新 Carbrake 方法,使其不会将 速度 减少到负值。

选择 brake 方法中的语句 self.speed -= 5,然后按 Ctrl + Alt + T(代码 -> 包围Surround with)。


环绕代码


选择 if 来为该语句添加条件。


PyCharm 创建了一个占位符 if 构造,留下你来填充适当的内容。


使用 if 语句进行替代的存根


输入 self.speed >= 5。我们在代码中指定了 brake 方法只有在 速度 大于或等于 5 时才扣除 5:

def brake(self):
    if self.speed >=5:
        self.speed -=5

那么速度低于 5 怎么办?当你在现实生活中对一辆缓慢行驶的汽车进行制动时,它只是停下来。让我们在代码中指定这一点。


在方法中指定条件


brake 方法的最后一行后添加一行新代码并开始输入 el...。PyCharm 提示你插入 else。按 Enter 插入它,缩进将自动修复:


https://resources.jetbrains.com/help/img/idea/2024.3/py_else_autocompletion.png


现在添加 self.speed = 0 以指定汽车应该停止。以下是更新后的 brake 方法代码:

def brake(self):
    if self.speed >=5:
        self.speed -=5
    else:
        self.speed =0

让我们再次运行以检查是否成功修复了问题。加速汽车,然后进行两次制动,并检查里程表:


修复问题后运行脚本


现在我们得到了预期的正确结果。


详细调试

调试工具窗口由用于帧、变量和观察的专用窗格以及显示所有输入和输出信息的控制台标签页组成。如果你想让控制台始终可见,可以将其拖到 PyCharm 窗口的边缘之一。


单步调试

如果你想一行一行地查看代码的执行情况,无需在每一行都设置断点,可以逐步执行代码。

让我们看看在示例程序中逐步执行是什么样子。通过窗口顶部的运行小部件启动或重新启动调试器:


重新启动调试器


在打开的调试器控制台中,按 a 加速汽车。调试器将在断点处停止。

我们可以使用逐步调试工具栏按钮来选择下一步在哪个行停止。


步进工具栏


例如,点击单步跳过(Step Over)  app 按钮,查看蓝色标记移动到下一行代码:


调试期间单步执行


继续点击  app ,直到到达 action = input("What should I do? [A]ccelerate, [B]rake, " "show [O]dometer, or show average [S]peed?").upper()

现在,如果你点击单步进入(Step Into)app按钮,你会看到调试器进入 parse.py 文件:


在调试期间单步执行


但是,如果你继续使用单步跳过  app ,你会看到你的应用程序只是继续下一个循环:


调试:传递到下一个循环


如果你想专注于自己的代码,使用单步进入我的代码(Step Into My Code)python-ce按钮。这样你将避免进入库类。

有关更多信息,请参考逐步调试工具栏和单步调试程序。


观察

PyCharm 允许你观察任何变量。只需在评估表达式或在线程和变量标签页下的工具栏下方的添加观察字段中输入要观察的变量名称。例如,my_car.time。这里提供代码补全。然后点击字段右侧的。

然后转到控制台标签页并输入任何命令,例如,b


观看完成


当你回到线程和变量标签页时,你会看到 my_car.time 的当前值:


在调试工具窗口中监视变量


有关更多信息,请参考观察。


内联调试

你可能已经注意到 PyCharm 的另一个功能,它使查看代码执行情况变得更加容易:内联调试器。只要你按下任何断点,PyCharm 就会在编辑器中显示许多变量的值:


内联调试


此内联调试功能默认启用。如果你没有看到内联调试值,请检查它是否在调试器设置中启用。点击调试器(Debugger)工具栏上的app,然后选择调试器设置(Debugger Settings )。确保在编辑器中显示变量值(Show Variable Values in Editor)已启用。

内联显示值


总结

所以,你已经做到了!恭喜!让我们回顾一下你在 PyCharm 的帮助下所做的事情:

  • 找出问题的根源
  • 设置断点
  • 逐步执行程序
  • 创建观察
  • 评估表达式


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号