ves*_*and 5 ide debugging python-3.x spyder
精华:
使用Spyder,可以通过突出显示代码并单击来运行部分代码F9。这也适用于For Loops,但问题(至少对我而言)是似乎无法一步一步地运行选定的零件。我发现这有点奇怪,因为可以在其他情况下逐步运行For Loops(并在每个步骤中检查变量的状态)。
请允许我解释一下:
以下代码段是对两个变量的操作,names = ['A', 'B', 'C']并values = [11,12,13]使用For循环。为了正确描述我无法使用此设置进行的操作,我觉得有必要解释一下我可以执行的操作,以及如果事实证明我所要做的事情使我觉得整个事情有点奇怪的原因想做实际上是不可能的。
我经常发现自己使用不同的例程弄乱了很多变量。我面临的问题是,为了调试这些例程,我经常不得不重新运行部分代码,以重新定义所有变量,然后才能真正在代码的其他部分中查找错误。这就是为什么能够对我可以在Spyders Variable Explorer中检查的预先存在的变量进行逐步调试的原因,这很棒。我主要是在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()
Run Code Online (Sandbox Code Playgroud)
以下是我的选择(如果问题似乎足够清楚,您可以轻松跳至选项5的最后一部分):
选项1-使用 Run file (F5)以下代码运行代码:
毫不奇怪,这将在IPython控制台中显示以下内容:
A = 11
B = 12
C = 13
Run Code Online (Sandbox Code Playgroud)
其余环境如下所示。请注意,它不会在内存中保留任何变量和/或在“变量资源管理器”中对其进行检查。这对于内存管理是有好处的,但是对于那些不关心这些事情的小规模程序员来说却是不利的。
选项2-忘记功能而只运行文件
注释掉def foo()并foo()单击Run file (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()
Run Code Online (Sandbox Code Playgroud)
环境:
注意,变量浏览器在执行代码后显示每个变量的状态。
选项3-现在使用Debug File (Cltr+F5)和和选项2相同的代码Run Current Line (Ctrl+F10)
单击Debug File (Cltr+F5)将使我从例程的开头开始,然后使用逐行浏览Run Current Line (Ctrl+f10)。在For循环中包括这些行。在每个步骤中,当变量在变量浏览器中更改时,我都可以轻松检查它们的状态。
一次遍历For循环后的环境:
对于像我这样的非专业程序员来说,这似乎是编写和调试代码的最简单,最基本的方法。但是,很难避免将代码包装到函数中以获得更大的可重用性的好处。因此,foo()再次返回:
选择4 -与调试功能Debug File (Cltr+F5),Continue Execution Until Next Breakpoint (Ctrl+F12)以及Step Into Function or Method of current line (Ctrl+F11)和Run Current Line (Ctrl+F10)。
使用会Debug File (Cltr+F5)启动调试并突出显示第2行。要继续进行,我可以使用Continue Execution Until Next Breakpoint (Ctrl+F12)它在第11行暂停执行。在这里,我可以选择对Run Current Line (Ctrl+f10)函数的调用而不再引起任何混乱,或者可以将函数Step Into Function or Method of current line (Ctrl+F11)带到我满意的地方。现在,我可以Run Current Line (Ctrl+F10)定义变量,甚至可以在变量浏览器中的For Loop中逐步检查变量。这是在函数中定义变量并单步执行For循环后的环境:
选项5-使用现有变量调试for循环
在Spyder中,您只需突出显示代码并使用它即可运行部分代码,Run Selection or Current Line (F9)甚至无需定义函数。因此,从头开始,我只需选择变量并单击即可定义变量F9。现在,它们可以在变量浏览器中进行进一步检查:
您可以对其余代码执行相同的操作。该For Loop运行的全部和变量在变量探险变得可用。
现在,最后,我们得出了主要问题。是否可以以任何方式逐步执行突出显示的For Loop ,而不是像选项1 一样同时遍历整个过程?(并且不必通过函数在断点处运行,停止和继续使用F10等中描述的选项4?)
理想情况下,它就像突出显示代码并做类似的事情一样简单Stepwise debug selected code (Ctrl'??)。
我希望这对某些人有意义。并且请让我知道这种方法从头到尾是否完全错误!
谢谢!
编辑:在运行所选零件之前添加断点F9无效:
编辑2-系统信息:
(这里是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 Code Online (Sandbox Code Playgroud)
然后使用Run file/ 运行文件,F5或者使用Ctrl+将其作为单元格运行Enter。通过此简单的更改,您将在pdb.set_trace()放置的代码行中获得一个调试器会话,并for在其下方输入一个周期,以逐行对其进行迭代。
注意:从Python 3.7开始,这甚至更简单,因为它添加了一个称为breakpointreplace 的新内置函数pdb.set_trace(),但效果完全相同。
| 归档时间: |
|
| 查看次数: |
3146 次 |
| 最近记录: |