1.5 调试Python程序
微课视频
在开发复杂的Python程序时,如果出现bug,就需要对程序进行调试,以便找出bug对应的代码行。调试程序的方法很多,例如,可以使用print函数在程序的不同位置输出特定的信息,以便缩小bug出现的范围。不过这种方法太原始了,现在普遍使用的方法是通过调试器一步步跟踪代码行,这种方式可以非常方便地找到bug所在的位置。
在PyCharm中调试Python代码的步骤如下。
图1-15 设置断点后的效果
1.设置断点
设置断点是调试程序的过程中必不可少的一步。Python调试器每次遇到断点时会将当前线程挂起,也就是暂停当前程序的运行。
在PyCharm编辑器中行号的后面单击,就可以为当前行添加断点,如果当前行已经有断点,再单击一次,就会删除当前行的断点。设置断点后的效果如图1-15所示。
2.以调试方式运行Python程序
在PyCharm中运行分为两种方式:Release和Debug,也就是发行和调试。如果只想观察程序的执行效果,可以选择Release方式;如果要调试程序,就需要使用Debug方式。
Debug按钮在PyCharm工具栏左侧,如图1-16所示(显示小爬虫的按钮,在Release按钮的右侧)。
图1-16 Debug按钮
现在单击Debug按钮,就会运行Python程序,如果Python程序没有设置任何断点,Debug和Release方式运行的效果是一样的,都会输出运行结果,只不过以Debug方式运行程序,除了会输出运行结果,还会连接到调试服务器,并输出如图1-17所示的连接成功信息。
如果Python程序中有断点,当程序执行到断点处,就会暂停程序,并且将断点行设为蓝色背景,如图1-18所示。
图1-17 输出连接成功信息
图1-18 将断点行设为蓝色背景
同时,在PyCharm下方会显示Debugger视图,如图1-19所示。在该视图中会显示各种调试信息。
3.跟踪调试程序
调试的主要目的是将程序中的数据展现出来,也就是说,调试调的就是程序中的数据。因此,通过Python调试器,可以用多种方式观察Python程序中数据的变化。例如,由于n = 20在m = 30前面,所以在m = 30处中断后,n = 20肯定是已经执行了,可以将光标放到n = 20语句上,这时会在弹出的窗口中显示变量n的数据类型和当前的值,同时在每条变量赋值语句的后面会显示当前变量的值,如图1-20所示。
图1-19 Debugger视图
图1-20 显示变量n的数据类型和当前的值
在Debug视图的上方有一排按钮,如图1-21所示。弯曲箭头的按钮是Step Over,向下箭头的按钮是Step Into。这两个按钮功能是用来一步一步调试代码的。使用Step Into调试代码,当遇到函数、方法等代码块时,会跟踪进入代码块,然后继续一步一步运行代码(单击一下按钮,就会执行一条语句)。使用Step Over调试,如果遇到代码块,会将这个代码块当作一条语句来处理,并不会进入代码块内部。通常来讲,如果用户不能确认代码块中的代码是否正确,建议使用Step Into进行调试,这样可以跟踪每一行代码,如果用户可以保证代码块一定是正确的,那么使用Step Over进行调试会更节省时间。
4.在运行时修改变量的值
断点调试不仅可以跟踪代码,还可以在运行时修改变量的值,这样就不需要每次使用不同的值调试时都重新运行程序了。如果在使用某个变量之前改变该变量的值,那么下次使用该变量时,就会使用新值。
要想修改变量的值,需要在Variables窗口中选中该变量,然后在右键菜单中单击Set Value…菜单项,如图1-22所示。这时该变量处于可编辑状态,如图1-23,直接在文本框中输入新值即可。
图1-21 用于调试的功能按钮
图1-22 在右键菜单中单击Set Value...菜单项
编辑完变量n的值后,在代码区域,变量后面的当前值提示也会变成修改后的值,但源代码是不会改变的,如图1-24所示。下一次使用变量n,值就会变成100。
图1-23 该变量处于编辑状态
图1-24 编辑变量后的效果