Bagaimana cara memanipulasi variabel yang namanya bertentangan dengan perintah PDB?

95

Kode saya, baik atau buruk, penuh dengan variabel huruf tunggal (ini hal fisika, jadi huruf-huruf itu bermakna), serta NumPy, yang sering saya gunakan untuk berinteraksi.

Saat menggunakan debugger Python, terkadang saya ingin melihat nilai, katakanlah n,. Namun, ketika saya menekan n<enter>, itulah perintah PDB untuk (n)ext, yang memiliki prioritas lebih tinggi. print nbekerja sambil melihatnya, tetapi bagaimana saya bisa mengaturnya?

Nick T.
sumber
2
Agak berlebihan, tetapi apakah Anda sudah mencobanya eval? eval('n = 3')? Mungkin membantu :)
Paulo Bu

Jawaban:

132

Gunakan tanda seru !sebelum pernyataan untuk menjalankannya:

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)

The docs mengatakan:

! statement

Jalankan (satu baris) pernyataan dalam konteks stack frame saat ini. Tanda seru dapat dihilangkan kecuali kata pertama dari pernyataan tersebut menyerupai perintah debugger. [...]

Abraham
sumber
1
IMO akan lebih ramah pengguna untuk perintah yang diperlukan! atau beberapa awalan seperti itu.
pengguna76284
13

Anda dapat menggunakan titik koma, jadi taruh saja yang lain di depannya:

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

ipdb> 1; n=4
1
ipdb> print n
4
Corley Brigman
sumber
7
Solusi fungsional, tapi saya percaya '!' apakah operator dimaksudkan untuk menangani kasus ini.
dinosaurus
2

Itu bukanlah jawaban langsung untuk pertanyaan Anda, tetapi dapat membantu Anda: PuDB adalah antarmuka visual berbasis konsol untuk PDB yang memisahkan perintah dari manipulasi variabel berdasarkan desain.

Bartosz Marcinkowski
sumber
Terlihat menarik; Saya harus mencobanya ketika saya punya waktu untuk belajar
Nick T
-1

Eric IDE, Wing IDE & Spyder untuk menyebutkan hanya beberapa yang semuanya memiliki debugger visual yang layak untuk digunakan karena mereka memisahkan tampilan nilai dari perintah.

Steve Barnes
sumber
debugger visual biasanya sangat lambat dibandingkan dengan debugging melalui konsol, yang hampir tidak membutuhkan waktu untuk memulai debugger.
Curious
1
@Curious Mereka lebih lambat untuk memulai tetapi seringkali lebih berguna terutama bagi mereka yang memiliki pengalaman terbatas.
Steve Barnes
Untuk karya ilmiah saya menemukan debugger Spyder berguna. Saya tidak berpikir
men-