Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Spyder中从命令行调试Python函数(或类)_Python_Debugging_Spyder - Fatal编程技术网

在Spyder中从命令行调试Python函数(或类)

在Spyder中从命令行调试Python函数(或类),python,debugging,spyder,Python,Debugging,Spyder,我是一个新的Python用户,一直在用Matlab编程,所以我决定使用Spyder IDE(它看起来很像Matlab IDE) 现在我想调试(逐行执行以便理解)一些python代码,这些代码是作为一个类编写的,带有几个内置函数。因此,我在类的\uuuu init\uuu函数中插入了一个断点,但是,当我开始调试时,它没有到达指定的断点(因为我必须调用类初始化,而不仅仅是代码执行) 可以从命令行开始类调试吗? 在Matlab中,我只需从命令行调用一个函数,它将在指定的断点处停止。在这里,我必须启动一

我是一个新的Python用户,一直在用Matlab编程,所以我决定使用Spyder IDE(它看起来很像Matlab IDE)

现在我想调试(逐行执行以便理解)一些python代码,这些代码是作为一个类编写的,带有几个内置函数。因此,我在类的
\uuuu init\uuu
函数中插入了一个断点,但是,当我开始调试时,它没有到达指定的断点(因为我必须调用类初始化,而不仅仅是代码执行)

可以从命令行开始类调试吗? 在Matlab中,我只需从命令行调用一个函数,它将在指定的断点处停止。在这里,我必须启动一个调试器,而不是调用一个函数。如果我简单地称之为:

import energy_model
x = energy_model.EnergyModel()
它将只执行并忽略我的断点

希望我的问题清楚。 谢谢
Mikhail

首先,确保您在spyder中点击的是调试按钮,而不是运行按钮。run按钮不会触发断点,因此您需要点击debug,然后继续访问代码中的第一个断点

如果失败,一个选项是使用python调试器(pdb)。这完全来自命令行,即运行调试命令和接收调试信息也将通过命令行

class EnergyModel:
     __init__(self):
          # set breakpoint
          import pdb; pdb.set_trace()
          ...
从命令行运行将在
\uuuu init\uuu
方法中暂停执行

此处列出了在命中断点时可以发出pdb的一些命令:

更新#1

spyder可以在其上触发断点的函数示例

def test(a_string):
    print(a_string) # breakpoint set here will be hit

test("hello world")

如果您想在Spyder中调试代码,最好通过单击蓝色的“播放/暂停”按钮来运行它所在的模块进行调试

那么,我们如何调试一个所有类或函数都没有脚本的模块呢?我们添加了一个脚本,该脚本仅在我们单击播放该模块时运行,方法是将其全部放在
下,如果
中的。(


然后我们可以在我们想要调试的函数或类中设置一个断点,从
中调用该断点,如果
,则在
中调用该断点。

谢谢您的提示,但我的问题是:我可以调用函数调用(或类创建命令)吗使用调试模式(而不是运行模式)?我可能会有误解。如果我在spyder中设置了一个断点,如上面的edit 1中所示,然后运行debug,然后继续,spyder将在断点处停止。您不是这样吗?