如何处理名称与PDB命令冲突的变量?


95

不管是好是坏,我的代码充斥着单个字母变量(这是物理上的东西,所以这些字母是有意义的)以及我经常与之交互的NumPy。

使用Python调试器时,偶尔我会想看看的值n。但是,当我点击时n<enter>,这是PDB命令的(n)ext优先级更高。 print n可以解决问题,但是如何设置呢?


2
有点矫kill过正,但您尝试过eval吗?eval('n = 3')?也许有帮助:)
Paulo Bu

Answers:


131

!在语句运行前使用感叹号:

python -m pdb test.py
> /home/user/test.py(1)<module>()
-> print('foo')
(Pdb) !n = 77
(Pdb) !n
77
(Pdb) n
foo
> /home/user/test.py(2)<module>()
-> print('bar')
(Pdb)

文件说:

! statement

在当前堆栈框架的上下文中执行(单行)语句。除非语句的第一个单词类似于调试器命令,否则可以省略感叹号。[...]


1
IMO要求的命令会更加人性化!或一些这样的前缀。
user76284

13

您可以使用分号,因此只需在其前面加上其他内容即可:

ipdb> print n
2
ipdb> n
> 145 <some code here>
  146
  147

ipdb> 1; n=4
1
ipdb> print n
4

7
一个功能性的解决方法,但我相信'!' 是运营商打算处理的这种情况。
2015年

2

这不是您问题的直接答案,但可能会对您有所帮助:PuDB是PDB的基于控制台的可视界面,通过设计将命令与变量操作分开。


看起来很有趣;当我有时间学习时,我将不得不a一口
Nick T

-1

Eric IDE,Wing IDE和Spyder仅举几例都具有可视调试器,因为它们将值的显示与命令分开,因此值得一试。


与通过控制台进行调试相比,视觉调试器通常非常慢,而启动控制台几乎不需要时间。
好奇的是

1
@好奇它们的启动速度较慢,但​​通常更有用,尤其是对于经验有限的人。
史蒂夫·巴恩斯

对于科学工作,我确实发现Spyder的调试器很方便。我认为在CLI上调试10x10矩阵不可行
shaunakde
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.