Jadi saya menjalankan skrip Python di mana saya memanggil debugger Python, PDB dengan menulis:
import ipdb; ipdb.set_trace()
(Versi PDB iPython, meskipun untuk hal ini saya tidak berpikir itu membuat perbedaan; Saya menggunakannya untuk output berwarna saja).
Sekarang, ketika saya sampai ke debugger saya ingin menjalankan pernyataan multi-line seperti jika klausa atau untuk loop tetapi segera setelah saya mengetik
if condition:
dan tekan tombol kembali, saya mendapatkan pesan kesalahan *** SyntaxError: invalid syntax (<stdin>, line 1)
Bagaimana kita bisa menjalankan pernyataan multi-line dalam PDB? Jika tidak memungkinkan apakah ada cara lain untuk tetap mengeksekusi klausa if atau for for?
interact
perintah pdb ( seperti yang saya pelajari dari pesan pelacak bug ini ).!
dibutuhkan dalamimport
pernyataan itu?!
, untuk menghindari kecelakaan. Misalnyac = 42
dalam pdb akan melanjutkan eksekusi daripada menugaskan ke variabelc
.interact
juga, tetapi itu tidak cocok dengan saya untuk Spyder.Dalam python3
ipdb
(danpdb
) memiliki perintah yang disebut berinteraksi . Dapat digunakan untuk:Untuk menggunakannya, cukup masukkan
interact
di prompt pdb. Di antara hal-hal lain, ini berguna untuk menerapkan kode yang mencakup beberapa baris, dan juga untuk menghindari pemicu yang tidak disengaja dari perintah pdb lainnya.sumber
interact
adalah saran yang terlalu kuat. 90% ini yang saya butuhkan, dan jauh lebih mudah untuk mengetik daripadafrom IPython import embed; embed()
Rekomendasi saya adalah menggunakan embedding IPython.
sumber
import embed; embed(user_ns=locals())
.Di dalam interpreter atau debugger Python (2.7.1), impor pdb), Anda bisa menjalankan pernyataan multi-baris dengan sintaks berikut.
Catatan: Ketika saya di dalam interpreter, saya harus menekan return dua kali sebelum kode akan dieksekusi. Di dalam debugger, bagaimanapun, saya hanya perlu menekan kembali sekali.
sumber
Ada kasus khusus jika Anda ingin beberapa perintah dieksekusi ketika mencapai break point. Lalu ada perintah debugger
commands
. Ini memungkinkan Anda untuk memasukkan banyak baris perintah dan kemudian mengakhiri seluruh urutan denganend
kata kunci. Lebih banyak dengan(pdb) help commands
.sumber
Saya tidak tahu apakah Anda bisa melakukan ini, itu akan menjadi fitur hebat untuk ipdb. Anda dapat menggunakan daftar pemahaman tentu saja, dan menjalankan ekspresi multi-line sederhana seperti:
Anda juga dapat menulis beberapa fungsi sebelumnya untuk melakukan apa pun yang perlu Anda lakukan yang biasanya akan mengambil beberapa baris.
sumber
Tulis kode Anda dalam editor teks, lalu tempelkan ke dalam debugger:
Ini adalah solusi konyol, tetapi juga cepat kotor dan bekerja. Ini bekerja di terminal Linux, tetapi saya tidak yakin apakah itu akan bekerja pada konsol Windows.
sumber
*** SyntaxError: unexpected EOF while parsing