web-dev-qa-db-ja.com

名前がPDBコマンドと競合する変数を操作するにはどうすればよいですか?

私のコードは、良くも悪くも、1文字の変数(物理的なものなので、これらの文字は意味があります)と、私がよくやり取りするNumPyの変数であふれています。

Pythonデバッガーを使用するときは、たとえばnの値を確認したいことがあります。ただし、n<enter>を押すとPDBになります優先度の高い(n)extのコマンドprint nは、それを見て回避しますが、どのように設定できますか?

74
Nick T

感嘆符を使用する!実行するステートメントの前:

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 say:

! statement

現在のスタックフレームのコンテキストで(1行)ステートメントを実行します。ステートメントの最初のワードがデバッガーコマンドに似ていない限り、感嘆符は省略できます。 [...]

106
Abraham

セミコロンを使用できますので、その前に何か他のものを置くだけです:

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

ipdb> 1; n=4
1
ipdb> print n
4
13
Corley Brigman

それはあなたの質問に対する直接的な答えではありませんが、あなたを助けるかもしれません: PuDB は、設計による変数操作からコマンドを分離するPDBのコンソールベースの視覚的インターフェースです。