gpt4 book ai didi

python-3.x - 逐步调试选定的 Python 代码

转载 作者:行者123 更新时间:2023-12-04 02:06:27 25 4
gpt4 key购买 nike

精华:
使用 Spyder,可以通过 运行部分代码突出显示它并单击F9。这也适用于 For 循环,但问题(至少对我而言)是似乎不可能运行所选部分 一步一步 .我觉得这有点奇怪,因为可以在其他环境下逐步运行 For 循环(并在每一步检查变量的状态)。
请允许我解释:

下面的代码片段是对两个变量 names = ['A', 'B', 'C'] 的操作和 values = [11,12,13]使用 For 循环。为了正确描述我不能用这个设置做什么,我觉得有必要解释我能做什么,以及为什么我认为整个事情有点奇怪,如果事实证明我想做其实是不可能的。
我经常发现自己使用不同的例程来处理很多变量。我面临的问题是,为了调试这些例程,我经常必须重新运行重新定义所有变量的部分代码,然后才能真正找到代码其他部分中的错误。这就是为什么能够对我可以在 Spyders 变量资源管理器中检查的预先存在的变量运行 For 循环的逐步调试会很棒。我主要是在 Spyder 中使用 Python,但请建议其他可能的 IDE。

这是一个例子:

def foo():
names = ['A', 'B', 'C']
values = [11,12,13]
i = 0
for n in names:
variable = str(n) + ' = ' + str(values[i])
print(variable)
i += 1
foo()

以下是我的选项(如果问题看起来足够清楚,您可以轻松跳到最后一部分 选项 5 ):
选项 1 - 使用 运行代码运行文件(F5):
不出所料,这会在 IPython 控制台中打印以下内容:
A = 11
B = 12
C = 13
其余的环境如下所示。请注意,它不会在内存中留下任何变量和/或在变量资源管理器中进行检查。这对内存管理有好处,但对于不关心这些事情的小规模程序员来说却不利。
enter image description here
选项 2 - 忘记函数,只运行文件
评论 def foo()foo()并单击运行文件 (F5)(也修复缩进)将相同的内容打印到 IPython 控制台并将变量留在变量资源管理器中以供进一步检查。
编辑后的代码:
#def foo():
names = ['A', 'B', 'C']
values = [11,12,13]

i = 0
for n in names:
variable = str(n) + ' = ' + str(values[i])
print(variable)
i += 1
#foo()
环境:
enter image description here
请注意,变量浏览器显示了代码执行后每个变量的状态。
选项 3 - 与选项 2 相同的代码现在使用调试文件 (Cltr+F5) 和运行当前行 (Ctrl+F10)
单击调试文件 (Cltr+F5) 将使我从例程的开头开始,并使用运行当前行 (Ctrl+f10) 逐行逐行执行。包括 For 循环中的行。在每一步,我都可以在变量浏览器中轻松检查变量的状态。
单步执行一次 For 循环后的环境:
enter image description here
对于像我这样的非专业程序员来说,这看起来是编写和调试代码的最简单和最基本的方法。但是,很难避免将代码包装到函数中以获得更大的可重用性的好处。所以,回到 foo()再次:
选项 4 - 带有调试文件的调试函数 (Cltr+F5)、继续执行直到下一个断点 (Ctrl+F12) 和单步执行当前行的函数或方法 (Ctrl+F11) 和运行当前行 (Ctrl+F10) .
使用调试文件 (Cltr+F5) 启动调试并突出显示第 2 行。要继续执行,我可以使用继续执行直到下一个断点 (Ctrl+F12),它会在第 11 行停止执行。在这里我可以选择运行当前行 (Ctrl +f10) 调用函数而不再模糊,或者我可以单步执行当前行的函数或方法 (Ctrl+F11),这将我带到了我快乐的地方。现在我可以运行当前行 (Ctrl+F10) 来定义变量,甚至可以在变量资源管理器中逐步检查 For 循环中的变量。这是在函数内定义变量并单步执行 For 循环一次后的环境:
enter image description here
那么问题又来了??
选项 5 - 使用现有变量调试 for 循环
在 Spyder 中,您可以通过突出显示部分代码并使用运行选择或当前行 (F9) 来运行部分代码,甚至无需定义函数。因此,从头开始,我可以通过选择变量并单击 F9 来定义我的变量。现在它们可以在变量资源管理器中进行进一步检查:
enter image description here
您可以对其余代码执行相同的操作。 For Loop正在运行 全文并且变量在变量资源管理器中可用。
enter image description here
现在,我们终于来到了主要问题。是否有可能以任何方式运行突出显示的 For 循环 一步一步,而不是同时完成整个事情喜欢在 选项 1 ? (并且无需运行该函数,在断点处停止并继续使用 F10,如 选项 4 中所述?)
理想情况下,它就像突出显示代码并执行诸如逐步调试所选代码(Ctrl'??)之类的操作一样简单,仅此而已。
我希望这对你们中的一些人有意义。如果这种方法从头到尾完全错误,请告诉我!
谢谢!
编辑:在使用 F9 运行所选部分之前添加断点没有任何效果:
enter image description here
编辑 2 - 系统信息:
  • Windows 7
  • Python 3.6.0 Anaconda 自定义(64 位)
  • Spyder 3.2.5
  • 最佳答案

    (这里是 Spyder 维护者)有一个技巧很少有人知道,可以在 Python 代码中的任何地方引入断点:import pdb; pdb.set_trace() .

    在您的情况下,您需要将代码替换为

    def foo():
    names = ['A', 'B', 'C']
    values = [11,12,13]
    i = 0
    import pdb; pdb.set_trace()
    for n in names:
    variable = str(n) + ' = ' + str(values[i])
    print(variable)
    i += 1

    foo()

    然后用 Run file 运行你的文件/F5 或者也可以作为带有 Ctrl + Enter 的单元格。通过这个简单的更改,您将在 pdb.set_trace() 行获得一个调试器 session 。被放置并输入 for在它下面循环以逐行遍历它。

    注意:由于 Python 3.7 这更简单,因为它添加了一个名为 breakpoint 的新内置函数。替换 pdb.set_trace() ,但效果完全相同。

    关于python-3.x - 逐步调试选定的 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48182309/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com