还记得,在之前的教程中您已经创建并运行了Car脚本吗?让我们多玩一点,修改average_speed
函数如下:
让我们看看当我们启动脚本时会发生什么,并尝试找出我们的平均速度:
糟糕... PyCharm 报告运行时错误:a ZeroDivisionError
.
让我们更深入地研究一下我们的代码,找出问题所在。我们可以使用 PyCharm 调试器准确查看代码中发生的情况。要开始调试,您必须先设置一些断点。要创建断点,只需单击装订线
接下来,单击该子句旁边的装订线中的图标,然后选择Debug 'Car'。
main
PyCharm 启动调试会话并显示调试工具窗口
单击按钮继续执行脚本,然后在控制台选项卡中输入
S
并按下Enter:
单击按钮以恢复脚本执行。例外在这里。另一个断点也出现了:默认情况下,PyCharm 会因代码中未捕获的任何异常而停止,并且会显示一个带有闪电的断点图标。
调试器还会显示错误消息。所以我们发现了我们的问题。您还可以在调试器中看到该值self.time
等于零:
为了避免再次遇到同样的问题,让我们添加一条if
语句来检查时间是否为零。为此,请选择return self.odometer / self.time
方法中的语句average_speed
,然后按Ctrl+Alt+T( ):
PyCharm 创建一个存根if
构造,让您完成用正确内容填充它的任务。
编辑后,我们得到以下信息:
让我们仔细看看调试器如何显示您的代码在做什么。
调试工具窗口显示框架、变量和监视的专用窗格,以及显示所有输入和输出信息的控制台。如果您希望控制台始终可见,您可以将其拖动到 PyCharm 窗口的边缘之一。
如果您想逐行查看代码的作用,则无需在每一行都放置断点,您可以单步执行代码。
让我们看看单步执行我们的示例程序是什么样子的:单击按钮,转到控制台询问汽车的平均速度(输入“S”),我们可以看到我们按下了断点。
我们可以使用步进工具栏按钮来选择我们想在哪一行停止下一步。
例如,单击Step Over按钮并看到蓝色标记移动到下一行代码:
如果单击Step Into按钮,您将看到
action = input("What should I do? [A]ccelerate, [B]rake, " "show [O]dometer, or show average [S]peed?").upper()
调试器进入文件parse.py的行之后:
但是,如果您继续使用,您会看到您的应用程序只是传递到下一个循环:
如果您想专注于自己的代码,请使用Step Into My Code按钮- 这样您就可以避免进入库类。
PyCharm 允许您观察任何变量。只需在Evaluate and Watch字段中输入您想观察的变量的名称- 就这样吧my_car.time
。请注意,此处提供了代码完成功能。然后单击该字段旁边的 。
首先,您看到时间等于 nil - 这意味着该变量尚未定义:
但是,当程序继续执行到定义变量的范围时,手表会得到以下视图:
有关详细信息,请参阅手表部分。
您可能已经注意到 PyCharm 的另一个功能,它可以轻松查看您的代码在做什么:内联调试器。只要你按下任何断点,PyCharm 就会在编辑器中显示许多变量的值:
默认情况下启用此内联调试功能。如果您没有看到内联调试值,请使用调试工具栏上的设置图标检查它是否已启用:
所以,你做到了!恭喜!让我们重复一下您在 PyCharm 的帮助下所做的事情:
找出问题的根源
设置断点
逐步完成您的程序
创建了一个手表
评估一个表达式