⑤ 错误定位
我们并不能保证我们的程序一定是正确的,有时可能会因为一些问题导致程序 运行停止,那就 需要我们定位到错误位置了,比如我们把print(a)改成print(a/0), 故意引发除0错误。执行结果如下:
F:\Project\Python\Test\venv\Scripts\python.exe F:/Project/ Traceback( most recent call last): File "F:/Project/Python/Test/test.py",line 2, in <module> print(a/0) ZeroDivisionError:division by zero
点击test.py即可定位到错误位置,为第2行,然后进行修改即可。当然,只是这种显而易见的错误能够直接定位到,更复杂的错误就需要通过程序调试来定位了。
4、PyCharm程序调试
一般的程序调试流程:「下断点」,「单步调试」,「值跟踪」
① 下断点
当程序执行到断点所在的代码时,会暂停应用程序的运行,线程被挂起,然后可以通过调试器进行跟踪。
下断点的方式也很简单,点击某行代码的左侧,会出现如图所示的小红点。
这个小红点就是断点,在PyCharm中,有着各种类型的断点:
1. 行断点
对「特定行进行调试
」时用到,点击行所在的左侧边栏即可设置。 右键点击这个断点,会弹出如下所示的设置对话框:
如果你取消了Enabled勾选,断点就处于如图所示的禁用状态:
2. 方法断点
把断点下到一个「方法」名前,一般用于检测方法的「输入参数」与「返回值」。比如:
3. 变量断点
有时我们对程序运行过程并不关心,而只「关注某个变量的变化」,可以在变量定义前加一个断点。比如:
在程序运行过程中,如果该变量的值发生改变,程序会自动停下来,并定位到变量值改变的地方,供开发者调试。
4.条件断点(断点设置Condition)
有时会有这样的场景:把断点打到循环体的中,我们只关心特定循环次数下的运行情况。 比如一个循环10次的循环体,我们想知道循环到第8次时的运行情况,如果你不知道条件断点的话,你需要一直按「Run to Cursor」直到满足我们的条件。比如下面的代码:
使用条件断点的话,邮件断点,输入如下所示的「等式条件」:
然后可以发现,程序直接跳到i=8的时候才挂起,非常方便。
5.日志断点
调试的时候我们可以通过打印日志的方式来定位异常代码大概位置,以缩小引发问题的范围,然后再使用断点精确定位问题。如果是普通的打印日志,我们需要等待重新构建程序,如果用「日志断点」就避免这个无意义的等待。使用日志断点非常简单,右键断点,去掉「Suspend」的勾选,会出现如下所示的弹窗,勾选「Evaluate and log」在此输入想输出的内容。
运行调试后,当执行到日志断点的时候可以看到控制台输出了对应的日志信息,而且程序正常运行,并不会挂起。
如果想查看更详细的信息,比如断点的位置和触发时的堆栈信息,可以勾选「"Breakpint hit" message」和「Stacktrace」,勾选后输出内容会变得更详细。