saya memiliki modul python dengan fungsi:
def do_stuff(param1 = 'a'):
if type(param1) == int:
# enter python interpreter here
do_something()
else:
do_something_else()
apakah ada cara untuk masuk ke penerjemah baris perintah di mana saya mendapat komentar? sehingga jika saya menjalankan berikut ini dengan python:
>>> import my_module
>>> do_stuff(1)
saya mendapatkan prompt saya berikutnya dalam ruang lingkup dan konteks di mana saya memiliki komentar do_stuff()
?
Jawaban:
Memasukkan
import pdb; pdb.set_trace()
akan masuk ke debugger python pada saat itu
Lihat di sini: http://docs.python.org/library/pdb.html
sumber
pdb
adalah python vanilla yang bagus; jika Anda memiliki ruang untuk membawa paket eksternal,ipdb
bagus - fungsionalitas yang sama dengan debugger, tetapi dengan penyorotan sintaks, penyelesaian tab, dll. dariipdb
tidak digunakan lagi, saat ini saya menggunakanpdbpp
(pdb++
) , yang memiliki fitur serupa, dan bekerja denganimport pdb; pdb.set_trace()
(yaitu menambal yang diimpor, jadi ini adalah pengganti drop-in)ipdb
tidak digunakan lagi? Saya tidak dapat menemukan berita tentang itu.ipdb
sebelumnya, tetapi telah menikmatinyapdbpp
sejakJika Anda menginginkan prompt interaktif standar (bukan debugger, seperti yang ditunjukkan oleh prestomation), Anda dapat melakukan ini:
import code code.interact(local=locals())
Lihat: modul kode .
Jika Anda menginstal IPython, dan menginginkan shell IPython, Anda dapat melakukan ini untuk IPython> = 0.11:
import IPython; IPython.embed()
atau untuk versi yang lebih lama:
from IPython.Shell import IPShellEmbed ipshell = IPShellEmbed() ipshell(local_ns=locals())
sumber
code.interact()
, ala PDBc(ontinue)
?code.interact()
adalah panggilan pemblokiran. Program Anda akan berhenti dan menunggu hingga selesai. Jika Anda keluar dari interpreter interaktif, program Anda harus dilanjutkan dengan pernyataan segera setelahnya.help
fungsiJika Anda menginginkan penerjemah Python default, Anda bisa melakukannya
import code code.interact(local=dict(globals(), **locals()))
Ini akan memungkinkan akses ke penduduk lokal dan global.
Jika Anda ingin menggunakan interpreter IPython,
IPShellEmbed
solusinya sudah usang . Saat ini yang berhasil adalah:from IPython import embed embed()
sumber
code.interact(local=dict(globals(), **locals()))
jauh lebih baik daripadacode.interact(local=locals())
karena yang terakhir membuat Anda mengimpor ulang paket