Saya telah banyak coding dengan Python akhir-akhir ini. Dan saya telah bekerja dengan data yang belum pernah saya tangani sebelumnya, menggunakan rumus yang belum pernah dilihat sebelumnya dan menangani file besar. Semua ini membuat saya menulis banyak pernyataan cetak untuk memverifikasi apakah semuanya berjalan dengan baik dan mengidentifikasi titik-titik kegagalan. Namun, secara umum, mengeluarkan begitu banyak informasi bukanlah praktik yang baik. Bagaimana cara menggunakan pernyataan cetak hanya ketika saya ingin men-debug dan membiarkannya dilewati ketika saya tidak ingin mereka dicetak?
109
level
, dalambasicConfig
panggilan, kelogging.ERROR
.logging.basicConfig(stream=sys.stderr, level=logging.ERROR)
akan berpengaruh. Memulai ulang kernel dan mengatur level baru berfungsi, tetapi itu adalah solusi bagi saya.Cara sederhana untuk melakukannya adalah dengan memanggil fungsi logging:
Kemudian Anda dapat mengubah nilai
DEBUG
dan menjalankan kode Anda dengan atau tanpa logging.logging
Modul standar memiliki mekanisme yang lebih rumit untuk ini.sumber
logging
kerjanya (pada tingkat yang sangat sederhana).Gunakan modul perpustakaan built-in logging daripada mencetak.
Anda membuat
Logger
objek (katakanlahlogger
), lalu setelah itu, setiap kali Anda menyisipkan cetakan debug, Anda cukup meletakkan:Anda dapat menggunakan
logger.setLevel
di awal program untuk mengatur tingkat keluaran. Jika Anda menyetelnya ke DEBUG, semua debug akan dicetak. Setel ke INFO atau lebih tinggi dan segera semua debug akan hilang.Anda juga dapat menggunakannya untuk mencatat hal-hal yang lebih serius, pada level yang berbeda (INFO, PERINGATAN, dan ERROR).
sumber
Pertama, saya akan kedua nominasi kerangka logging python . Namun, berhati-hatilah saat menggunakannya. Secara khusus: biarkan kerangka logging memperluas variabel Anda, jangan lakukan sendiri. Misalnya, alih-alih:
pastikan Anda melakukan:
karena meskipun terlihat serupa, versi pertama akan dikenakan biaya repr () meskipun dinonaktifkan . Versi kedua menghindari ini. Demikian pula, jika Anda menggulung sendiri, saya menyarankan sesuatu seperti:
dipanggil melalui:
yang akan, sekali lagi, menghindari overhead jika Anda menonaktifkannya dengan melakukan:
Overhead komputasi string tersebut mungkin tidak masalah kecuali jika 1) mahal untuk dihitung atau 2) pernyataan debug berada di tengah, katakanlah, loop n ^ 3 atau sesuatu. Bukannya aku tahu apa-apa tentang itu.
sumber
Saya tidak tahu tentang orang lain, tapi saya terbiasa mendefinisikan "konstanta global" (
DEBUG
) dan kemudian fungsi global (debug(msg)
) yangmsg
hanya akan mencetak jikaDEBUG == True
.Kemudian saya menulis pernyataan debug saya seperti:
... kemudian saya mengambil unit testing dan tidak pernah melakukan ini lagi! :)
sumber
print()
sambil membawa kode saya ke tingkat yang diperlukan untuk lulus ujian. Saya tidak pernah berakhir dengan jumlah besar diprint()
semua tempat. Logging juga keren! :)