Python 单步执行代码
本教程将讨论如何使用 Python 调试器单步执行代码。
我们将从头开始解释一个名为 PDB 的命令行工具。 我们还将学习如何在 Python IDLE 的帮助下逐步执行代码。
使用 pdb 模块在 Python 中单步调试代码
与其他编程语言一样,Python 也有一个用于调试 Python 脚本的优秀工具,即 pdb,它代表 Python 调试器。
每当您在操作系统上安装Python时,它就已经安装了,因此您不需要单独安装pdb。 如果您安装了 Python,它将在您的终端上运行。
pdb 模块是一个可以为您节省大量调试时间的工具; 它帮助我们检查正在运行的程序的状态。 我们可以对其进行实验,更改变量的值,使用不同的参数调用函数,运行代码片段等等。
它比通常的打印声明更强大,并且给出了与测试不同的图片。 我们的测试仅表明我们的代码没有按预期工作,而调试使我们能够看到程序执行期间发生的情况。
现在您可能想知道如果我们已经有了 PyCharm IDE 并且可以在 PyCharm IDE 上调试代码,为什么还要使用 pdb。 使用 pdb 的原因是有时在现实生活中,您可能会在某些服务器上运行 Python 脚本。
一般来说,您无法在这些服务器上使用 IDE。 您必须使用终端来调试 Python 脚本; 这就是为什么我们将向您展示如何使用命令行工具 pdb 调试 Python 脚本。
在 pdb 模块中,有一个名为 set_trace() 的断点。 使用此函数,您将有一个断点,您可以在其中检查不同的变量值并执行您想要的任何操作。
我们只需要在程序中插入两行代码,然后我们就可以得到命令行操作,可以做很多不同的事情。 我们很快就会演示这一点。
在进入代码之前,我们将看到一些不同命令行操作的摘要。
操作 | 说明 |
---|---|
n | 这将执行下一行代码。 |
c | 此操作将继续执行代码并完成执行。 |
l | 该操作会列出执行所在行的前后3行,这样您就可以看到刚刚执行的三行在哪里以及执行了什么。 |
s |
它会让您单步执行函数调用。 现在,如果您在进入函数时使用 n,它将执行整个函数并在函数调用后继续执行下一行。
s 允许您单步执行函数并逐行运行它。 |
b | 它将允许您设置断点。 您可以通过将 b 命令放入程序中来设置多个断点。 |
b[int] | 我们可以设置 b 后跟一个整数,以在数字的特定行设置断点(例如,b10)。 |
b[func] | b 后跟函数名称,可在不带方括号的函数名称处设置断点。 |
cl | 它将清除所有断点。 |
cl[int] | cl 后跟一个整数将清除特定行号处的断点,空格是可选的。 我们可以输入 cl10 或 cl 10; 这没有任何区别。 |
p |
我们还可以选择打印。 假设我们有一个变量 x; 如果我们在 Python shell 中输入它,它将打印出 x 的值。
我们可以使用带括号的 p 语句。 在括号内,我们只是放置一个变量。 |
还有更多操作可供选择。
让我们看一个例子,其中我们输入了一个小程序。 它什么也不做; 它只是设置一些变量值、打印语句并执行一些数学函数。
我们可以看到我们导入了 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()函数,所以我们要做的第一件事就是查看列表l。 它将显示之前执行的三行和接下来要执行的三行,并且它显示我们现在所在的位置,指示使用->。
现在我们可以选择使用 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 假设您正在执行一个函数,这样它将完成代码的执行,并且不会向您显示程序的逐步执行。 它只会执行程序并显示输出; 当您想跳过逐步执行时它很有用。
如果你想看看这个程序是如何工作的,执行了哪一行,以及这个程序是如何流动的,那么你可以使用这一步或以上。 步骤选项将为您提供有关该程序的所有信息。
如果我们不想知道程序内部是如何工作的,只想知道哪一行正在执行,那么最好的选择就结束了。 最后一个就退出了; 如果我们使用quit,它将在程序执行过程中退出。
以下是使用 Python IDLE 的调试器的一些工作。
相关文章
Python 编辑距离
发布时间:2023/06/29 浏览次数:67 分类:Python
-
今天,我们将学习Python中的编辑距离。 我们还将探讨字符串的插入、删除、替换和递归实现。在 Python 中编辑距离 编辑距离是将一个字符串转置为另一个字符串所需的量。
type.Dict 和 Dict 之间的区别及其在 Python 中的用途
发布时间:2023/06/28 浏览次数:93 分类:Python
-
本文讨论如何将类型提示与 Typing.Dict 结合使用,并将其与通常的 dict 函数区分开来。type.Dict 和 dict 之间的区别及其在 Python 中的用途
在 Python 中解析 JSON 对象数组
发布时间:2023/06/28 浏览次数:57 分类:Python
-
由于浏览器可以快速解析 JSON 对象,因此它们有助于在客户端和服务器之间传输数据。 本文将介绍如何使用Python的JSON模块传输和接收JSON数据。
在 Python 中等待 5 秒
发布时间:2023/06/28 浏览次数:152 分类:Python
-
本篇文章将讨论如何在 Python 中等待 5 秒。在 Python 中使用 time.sleep() 函数等待 5 秒 Python 的 time 模块提供了存储和操作时间的功能和对象。
Python 中的模糊字符串匹配
发布时间:2023/06/28 浏览次数:89 分类:Python
-
今天,我们将学习如何使用 thefuzz 库,它允许我们在 python 中进行模糊字符串匹配。 此外,我们将学习如何使用 process 模块,该模块允许我们借助模糊字符串逻辑有效地匹配或提取字符串。Py
在 Python 中执行 Shell 命令并获取输出
发布时间:2023/06/28 浏览次数:81 分类:Python
-
在本文中,我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。从 Python 脚本执行 CMD 命令并使用 os
Python 中的 Monkey 补丁
发布时间:2023/06/28 浏览次数:186 分类:Python
-
本文解释了什么是Monkey补丁以及如何在 Python 中实现它。 它有两个部分; 第一个演示了函数中的Monkey修补,第二个演示了如何在文件的单元测试中实现它。
Python 中的 Mock 和 Patch 之间的区别
发布时间:2023/06/28 浏览次数:182 分类:Python
-
在 Python 中,我们有一个称为单元测试的过程,其中包含模拟和补丁函数。 本文将讨论这两个角色的用途和区别。Python 中 Mock 和 Patch 对象库的用途和区别
在 Python 中使用 SciPy、NumPy 和 Pandas 存储数据
发布时间:2023/06/28 浏览次数:184 分类:Python
-
我们将了解为什么需要数据分箱以及哪种技术最适合哪种情况。Python 中的分箱 分箱是推断不同变量关系的最强大的分析技术之一。分箱是一种非参数且高度灵活的技术,其中变量被分类为不同