【问题标题】:How do I manipulate a variable whose name conflicts with PDB commands?如何操作名称与 PDB 命令冲突的变量?
【发布时间】:2014-01-14 20:35:53
【问题描述】:

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

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

【问题讨论】:

  • 有点矫枉过正,但你试过eval吗? eval('n = 3')?也许它有帮助:)

标签: python pdb


【解决方案1】:

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

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)

docs 说:

! statement

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

【讨论】:

  • IMO 要求 commands 会更加用户友好!或一些这样的前缀。
【解决方案2】:

你可以使用分号,所以在它前面放点别的东西:

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

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

【讨论】:

  • 一个实用的解决方法,但我相信'!'是打算处理这种情况的运营商吗?
【解决方案3】:

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

【讨论】:

  • 看起来很有趣;当我有时间学习时,我将不得不尝试一下
【解决方案4】:

Eric IDE、Wing IDE 和 Spyder 等等都具有值得一试的可视化调试器,因为它们将值的显示与命令分开。

【讨论】:

  • 与通过控制台调试相比,可视化调试器通常非常慢,控制台几乎不需要时间来启动调试器。
  • @Curious 它们启动速度较慢,但​​通常更有用,尤其是对于那些经验有限的人。
  • 对于科学工作,我发现 Spyder 的调试器很方便。我认为在 CLI 上调试 10x10 矩阵并不实用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2011-11-25
相关资源
最近更新 更多