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


95

私のコードは、良くも悪くも、1文字の変数(物理学のものなので、それらの文字は意味があります)と、私が頻繁にやり取りするNumPyのものでいっぱいです。

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


2
evalちょっとやり過ぎですが、やってみましたか?eval('n = 3')?多分それは助けになります:)
Paulo Bu 2014年

回答:


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行の)ステートメントを実行します。ステートメントの最初の単語がデバッガーコマンドに似ていない限り、感嘆符は省略できます。[...]


1
IMOコマンドが要求する方がユーザーフレンドリーだったでしょう!またはそのような接頭辞。
user762 8419

13

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

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

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

7
機能的な回避策ですが、「!」このケースに対処することを目的としたオペレーターです。
恐竜

2

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


面白そうだ。学ぶ時間があれば、それを突き刺さなければなりません
Nick T

-1

Eric IDE、Wing IDE、Spyderはすべて、値の表示をコマンドから分離しているため、一見の価値のあるビジュアルデバッガーを備えています。


ビジュアルデバッガーは通常、デバッガーの起動にほとんど時間がかからないコンソールを介したデバッグと比較して非常に低速です。
好奇心旺盛な

1
@Curious起動は遅くなりますが、特に経験が限られている人にとっては、より使いやすいことがよくあります。
スティーブバーンズ

科学的な仕事には、Spyderのデバッガーが便利だと思います。CLIでは10x10マトリックスのデバッグは実用的ではないと思います
shaunakde
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.