尝试使用 Python 调试器
。b(reak) [[filename:]lineno | function[, condition]]
或者
pdb.set_trace();
更详细的教程可以在这里找到。
你尝试过Spyder吗?这是一个开源的IDE,外观与Matlab非常相似。它也提供了你想要的调试器。 https://code.google.com/p/spyderlib/
PS: 我也在迁移到Python,但我避免使用这样的东西,因为我想以空白的思维开始。:) 但我读了很多从Matlab到Numpy的文章...
我已从Matlab和R转向使用Python。我尝试过不同的编辑器,所以我可以给您一些建议。
1- Spyder是最接近Matlab的,但我的印象是它并不是很好。当我开始运行大量数据的长时间模拟时,它经常崩溃。 如果您刚开始学习Python,我建议您先使用这个编辑器一段时间,然后再考虑其他选择。
2- Emacs Python mode工作得非常好。我认为它难以配置,如果您对Python不熟悉,可能不是最佳选择。
3- PyCharm。我刚开始使用PyCharm,它似乎非常好(让我想起了RStudio)。我不认为它支持类似Spyder或Emacs内部交互式控制台的功能。 您仍然可以在调试模式下获得类似的体验。
4- 许多人喜欢IPython Notebook,但我认为它不适合编写较长的代码。如果您需要易于可视化的东西,那么它是一个不错的选择。
在控制台中创建函数,其中使用pdb.set_trace(),然后调试您想要的函数。
>>> import pdb
>>> def f():
... pdb.set_trace()
... my_function()
...
>>> f()
> <stdin>(3)f()
(Pdb) s
--Call--
> <stdin>(1)my_function()
(Pdb)
愉快地调试吧 :)
在Python3.7+中设置永久断点,只需在源文件中插入表达式breakpoint()
即可。不再需要导入任何东西,甚至是pdb
。在非编译的Matlab中,相当于breakpoint()
的语句是keyboard
。
总体来说,在Python的调试提示符(Pdb)
(由breakpoint()
显示)之后,您可以在类似于调试语句的Python语句前加上感叹号(!
),而在Matlab的调试命令之后则以db
开头以消除歧义,其中一些命令只能在调试提示符K>
之后使用。
我也正在从Matlab迁移到Python。我习惯于在matlab -nodisplay
内进行调试,并且正在切换到没有IDE的python3.10。这两者非常相似,如下表所示,这是一个与调试相关的罗塞塔石。
您可以使用命令tb
或b
在(Pdb)
提示符下(或在您的文件$HOME/.pdbrc
中)创建其他断点。与Matlab的对应物dbstop
一样,您可以将它们设置为另一个文件、另一行,并让它们具有条件性。
这里是一个简短的罗塞塔石碑:
Python | Python 可用的快捷键 | Matlab |
---|---|---|
breakpoint() |
keyboard |
|
where |
w |
dbstack |
cont |
c |
dbcont |
up |
u |
dbup |
down |
d |
dbdown |
step |
s |
dbstep |
next |
n |
dbnext |
print expression |
p expression |
expression |
!nonlocal var;var= |
var= | |
break |
b |
dbstop 和 dbstatus |
clear |
cl |
dbclear |
list |
l |
dbtype |
display |
d |
变量窗口 |
help |
h |
help |
pp vars() |
save('b.mat');disp(load('b.mat')) |
|
python -m pdb -c continue filename.py |
dbstop if error |
Matlab没有以下的等价物:
ignore
n p (第n个断点只会在执行p次后触发提示)prettyprint
expression (快捷方式:pp
)jump
codelinenumber (快捷方式:j
)我还不知道Python是否有可用于save
和load
的等效功能,除了pp vars()
,evalin(caller,expr)
以及调试时的图形显示。
由于您提到正在使用 ipython
,您也可以检查一下 ipdb
。
您需要先通过 pip
或 easy_install
安装它。例如:
pip install ipdb
使用方法与pdb相同。当您放置ipdb.set_trace()
时,ipython控制台将弹出,您可以在其中检查/更改本地和全局变量,检查它们的文档和类型,进入传入函数的代码(使用“s”您将转到code123()
的定义),等等。
import ipdb;
code000()
ipdb.set_trace();
code123()
另外一个提示是如何从ipython中获取?
的功能(关于在调试器中获取函数和模块文档的方法)。这个答案。
winpdb
的工具。 - TheMeaningfulEngineer%run -d
可以让您在某个精确的行停止。请查看 %run?
。 - Matt