PyCharm入门第一步(二)——调试第一个Python应用程序
第2步:调试您的第一个Python应用程序
找出问题的根源
PyCharm报告运行时错误:a ZeroDivisionError。深入研究一下代码,找出问题所在。这里可以使用PyCharm调试器来查看代码中发生了什么。要开始调试,您必须先设置一些断点。要创建断点,只需单击左侧gutter:
接下来,单击左侧gutter中的播放图标,在main旁边,然后选择Debug 'Car'。 PyCharm启动调试会话并显示调试工具窗口。
在Console选项中,输入S:
如您所见,断点标记变为蓝色。这意味着已经达到了断点; 请注意,此时尚未执行突出显示的代码行。
单击播放图标以恢复脚本执行。现在另一个断点也出现了:默认情况下,PyCharm将停止代码中未捕获的任何异常,并且它将显示带闪电的断点图标。
控制台还会显示错误消息。您还可以在调试器中看到该值self.time等于零:
Surrounding code
为避免再次遇到同样的问题,现在添加一个if语句来检查时间是否等于零。为此,在方法average_speed中选择语句return self.odometer / self.time,然后按Ctrl + Alt + T(Code | Surround with):
PyCharm创建一个stub if构造,让你完成填充正确内容的任务。编辑后,得到以下内容:
详细调试
“调试”工具窗口显示框架, 变量和监视的专用窗格以及控制台,其中显示所有输入和输出信息。如果希望控制台始终可见,可以将其拖动到PyCharm窗口的一个边缘。
Stepping
如果您希望逐行查看代码的作用,则无需在每一行上设置断点,您可以单步执行代码。看一下示例程序是什么样子:单击播放图标,转到控制台询问汽车的平均速度(类型'S'),可以看到达到断点。这时可以使用Stepping工具栏按钮选择想要在下一行停止的行。
例如,单击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 Over 按钮,您将看到您的应用程序只是传递到下一个循环:
如果您想专注于自己的代码,请使用Step Into My Code按钮 - 这样您就可以避免进入库类。
Watching
PyCharm允许您观察任何变量。只需要单击Watches选项的工具栏中的+,然后输入你想要观看的变量的名称-将其设置为 my_car.time。请注意,此处可以使用代码完成:
首先,您看到时间等于nil - 这意味着该变量尚未定义:
但是,当程序执行继续到定义变量的作用域时,监视器将获得以下视图:
内联调试
您可能已经注意到另一个PyCharm功能,可以轻松查看代码正在执行的操作: 内联调试器。一旦你遇到任何断点,PyCharm就会在编辑器中向你显示许多变量的值:
默认情况下启用此内联调试功能。如果您没有看到内联调试值,请使用调试工具窗口中的设置图标检查它是否已启用::
评估表达式
最后,您可以随时评估任何表达式。
实际上,你可以用watch看到同样的东西。使用评估表达式,您可以执行使用watch无法执行的操作:您可以更改内容。例如,如果输入所需的里程表值50,然后继续单步执行脚本,您将获得以下信息:
概要
- 找出问题的根源
- 设置断点
- 逐步完成您的计划
- 创建一个 watch
- 评估一个表达