Python的步骤代码
本教程将讨论如何使用Python调试器来浏览代码。
我们将从头解释一个叫做PDB的命令行工具。我们还将学习如何在Python IDLE的帮助下浏览代码。
在Python中使用pdb
模块来遍历代码
像其他编程语言一样,Python 也有一个很好的调试 Python 脚本的工具,pdb
,它是 Python 调试器的缩写。
当你在操作系统上安装Python时,它就已经安装了,所以你不需要单独安装pdb
。如果你已经安装了Python,它将在你的终端上工作。
pdb
模块是一个可以为你节省大量调试时间的工具;它帮助我们检查一个正在运行的程序的状态。我们可以对它进行实验,改变变量的值,用不同的参数调用函数,运行代码片段,诸如此类。
它比通常的print
语句要强大得多,并给出了一个与测试不同的画面。我们的测试只表明我们的代码没有按照预期工作,而调试则允许我们看到在程序执行过程中发生了什么。
现在你可能想知道,如果我们已经有了PyCharm IDE,并且可以在PyCharm IDE上调试我们的代码,为什么还要使用pdb
。使用pdb
的原因是,有时在现实生活中,你可能会在一些服务器上运行你的 Python 脚本。
一般来说,你不可能在这些服务器上使用IDE。你将不得不使用终端来调试你的 Python 脚本;这就是为什么我们将向你展示如何使用命令行工具pdb
来调试一个 Python 脚本。
在pdb
模块中,有一个名为set_trace()
的断点。使用这个函数,你将有一个断点,在这里你可以检查不同的变量值,做你想做的事情。
我们只需要在程序中插入两行代码,然后就可以得到命令行操作,我们可以做一大堆不同的事情。我们很快就会演示这个。
在跳入代码之前,我们将看到一些不同的命令行操作的总结。
操作 | 说明 |
---|---|
n |
这将执行下一行代码。 |
c |
此操作将继续执行代码并完成执行。 |
l |
这个操作将列出执行的那一行前后的三行,这样你就可以看到在什么地方和什么三行刚刚被执行。 |
s |
它将让你步入一个函数调用。现在,如果你在进入一个函数时使用n ,它将执行整个函数,并进入函数调用后的下一行。 |
s 可以让你进入一个函数并逐行运行。 |
|
b |
它将允许你设置断点。你可以通过把b 命令放在程序里面来设置多个断点。 |
b |
我们可以设置b ,后面跟着一个整数,在一个数字的特定行设置断点(例如:b10 )。 |
b[func] |
b 后面跟着一个函数名,可以在一个不带方括号的函数名处设置断点。 |
cl |
它将清除所有断点。 |
cl |
cl 后面跟着一个整数,将在一个特定的行号处清除断点,空格是可选的。我们可以把cl10 或cl 10 ;这没有任何区别。 |
p |
我们还可以选择打印。假设我们有一个变量x ;如果我们在 Python shell 中输入它,它将打印出x 的值。 |
我们可以使用带有括号的p 语句。在圆括号内,我们只是放了一个变量。 |
还有更多的操作可用。你可以在这里阅读和学习更多的知识。
让我们看一个例子,我们打了一个小程序。它不做任何事情;它只是设置一些变量值,print
语句,并做一些数学函数。
我们可以看到我们导入了pdb
,然后我们用set_trace()
函数设置了一个断点。
import pdb
def transform(x,y):
x*=2
y=y**2
z=x+y
return z
x=50
y=60
z=5
n=1000
pdb.set_trace()
transform(5,10)
print('z ='+str(z))
n=transform(2,3)
print('n ='+str(n))
我们来看看这个程序是如何工作的,以及调试器是如何用来分析一些函数的。所以当我们执行程序时,我们看到我们在调试器的命令提示符中输入了Python。
下一行将执行的是transform()
函数,所以我们可能要做的第一件事是看 listl
。它将显示之前执行的三行和接下来要执行的三行,并显示我们现在所处的位置,表示使用->。
我们现在可以选择使用n
命令来执行下一行,这将完成整个transform()
函数并跳到第15行。或者,我们可以使用s
,在transform()
函数中逐行进入transform()
函数,看看里面发生了什么。
我们将使用n
,看看那里发生了什么。使用n
,我们执行transform()
函数。
如果我们想打印变量值,我们可以输入变量的名字,但是我们不能打印出n
,因为n
,我们会得到下一个执行行。
另一种方法是使用p()
命令,同时将n
变量放在括号内,以打印其值。
如果我们想看看我们还设置了哪些断点,我们也可以使用b
命令,所以如果我们输入b
,它没有返回什么,但是我们可以在第16行设置另一个断点。现在,如果我们输入b
,它会列出我们的断点。
cl
将清除所有断点。让我们说是的,所以我们删除我们的断点。
我们还可以在一个函数名称处设置断点。如果我们这样做,我们将在transform()
函数的开头设置一个断点,因此我们每次进入该函数时都会步入transform()
函数。
如果我们输入c
,就会继续到下一个断点,如果再输入c
,那就完成了我们的代码。
进入代码的调试可以通过breakpoint()
函数来实现,这是3.7版本中引入的一个新的内置函数。
根据Python官方文档,默认情况下,在幕后我们基本上是用breakpoint()
来调用pdb.set_trace()
。我们不需要导入pdb
并调用set_trace()
,而是用breakpoint()
来代替,效果是一样的。
使用Python IDLE在Python中逐步完成代码
本节将展示如何使用Python IDLE来调试Python程序。为了演示,我们将举一个两个数字相加的例子。
n1=int(input('Enter a first number :'))
n2=int(input('Enter a second number :'))
Res=n1 + n2
print(n1,'+',n2,Res)
要使用Python IDLE中的调试器,我们首先需要打开调试器,以打开Python IDLE。打开Python IDLE后,我们可以打开位于顶部的调试选项。
点击之后,会出现一个调试控制窗口。在这里我们可以看到调试已经打开。
打开它之后,我们可以看到调试控制窗口。这个控制窗口是不活跃的,我们不能在任何地方点击它。
我们需要在按下f5的同时执行Python脚本,使其处于激活状态。
在调试控制窗口中,有多个按钮;按钮的名称是:go
、step
、over
、out,
和quit
。如果我们按下go
,它将要求我们输入,并在输入后给出输出;否则,它将被卡住。
使用out
假设你正在执行一个函数,这样它就会完成代码的执行,不会向你显示程序的逐步执行。它将只是执行程序,并向你显示输出;当你想跳过一步步执行时,它很有用。
如果你想看看这个程序是如何工作的,哪一行被执行,以及这个程序是如何流动的,那么你可以使用这个步骤或过。step
选项将给你关于这个程序的所有信息。
如果我们不想知道程序内部是如何工作的,只想知道哪一行在执行,为此,最好的选项是over
。最后一个是quit
;如果我们使用quit
,它将在程序的执行过程中退出。
下面是一些使用Python IDLE的调试器的工作。