Cetak Stacktrace dalam Log Pyhton

Cetak Stacktrace Dalam Log Pyhton



Koleksi panggilan pendekatan pada saat tertentu diwakili dalam surih tindanan. Apabila program menimbulkan pengecualian, Python menjana surih tindanan, juga dikenali sebagai surih balik atau surih belakang. Terdapat pelbagai butiran dalam stacktrace ini yang boleh dieksploitasi untuk mencari masalah. Pakej pengelogan Python dilengkapi dengan beberapa ciri asas dan mempunyai pelbagai peringkat pengelogan termasuk 'nyahpepijat', 'maklumat', 'amaran', 'ralat', dan 'kritikal'.

Contoh 1: Cetak Stacktrace dalam Python dengan Menggunakan Modul Traceback

Dalam contoh ini, kami akan menggunakan sekeping kod ringkas untuk menunjukkan cara melaksanakan modul jejak balik Python untuk mencetak surih tindanan. Pakej jejak balik ini termasuk ciri yang disukai ramai untuk mengumpul, menyimpan dan mempamerkan surih tindanan daripada bahasa komputer. Ia dengan setia menduplikasi operasi pencetakan surih tindanan skrip. Jika anda perlu melihat jejak tindanan, ia adalah penting.

Dalam erti kata lain, surih tindanan memaparkan setiap operasi yang datang sebelum operasi yang mengakibatkan masalah. Maklumat yang paling penting sentiasa dilaporkan pada baris terakhir surih tindanan, iaitu apabila kesalahan dikenal pasti. Semua panggilan fungsi dalam ralat yang terhasil boleh digunakan untuk mencari dan menyelesaikan masalah dengan cepat.







Mari mulakan dengan melaksanakan kod melalui mengimport pustaka Python jejak balik. Kemudian, dalam baris berikut, kami mencipta tatasusunan dan menyenaraikan elemen dengan beberapa nilai. Nilai senarai tatasusunan ialah “7”, “8”, “9”, dan “10”. Terdapat empat nilai dalam senarai tatasusunan. Senarai tatasusunan ini telah disimpan dalam pembolehubah yang dimulakan sebelumnya 'A'.



Selepas itu, kami menggunakan istilah 'cuba' dan nilai 'A=6' dalam baris berikut. Kami menggunakan blok try-except dalam Python untuk mengurus pengecualian. Pendekatan ini digunakan untuk menulis skrip yang boleh menimbulkan ralat dalam pengepala blok. Pengecualian pada dasarnya adalah ralat, serupa dengan ralat sintaks. Semasa pengecualian program, pengendalian pengecualian ialah tindakan unik untuk bertindak balas terhadap pengecualian. Kembali ke skrip, kami menggunakan 'kecuali' dalam baris seterusnya.



Dalam blok except, kami menggunakan 'traceback.print exc()' yang merupakan singkatan untuk 'printing exception'. Kami menggunakan fungsi 'print()' di dalam kotak pengecualian iaitu 'tamat program' supaya pernyataan ini dicetak apabila pengecualian timbul. Sekarang, jika pengecualian berlaku dalam kotak cuba, atur cara segera beralih ke blok kecuali dan diteruskan. Jika pengecualian tidak berlaku, blok pengecualian dilangkau sepenuhnya. Memandangkan pengecualian berlaku, kita dapat melihat dalam kod bahawa nilai '6' telah dimasukkan ke dalam kotak percubaan walaupun ia tidak berada dalam senarai tatasusunan. Akibatnya, kod segera pergi ke kotak pengecualian dan mencetak pernyataan 'tamat program' dalam paparan output.





Panggilan fungsi berbeza yang membentuk surih balik disusun daripada yang paling terkini kepada yang paling terkini, dari bawah ke atas. Operasi ini semuanya diwakili oleh pernyataan dua baris. Setiap panggilan bermula dengan nama fail, nombor urutan dan nama modul, yang semuanya menunjukkan lokasi kod. Selepas itu, ia memaparkan pernyataan cetakan pengecualian 'tamat program' kerana nilai '6' tiada dalam senarai yang diisytiharkan, yang menghasilkan output 'indeks senarai di luar julat'.



Contoh 2: Cetak Stacktrace dalam Python dengan Menggunakan Kaedah Logging.Exception().

Dalam contoh ini, kami akan menunjukkan cara menggunakan kaedah 'logging.exception()' Python untuk mengeluarkan surih tindanan. Pakej pengelogan dalam Python membolehkan kami log ralat serta merekod ralat dan pengecualian. Modul pengelogan memberi kami pilihan modul pengelogan termasuk 'nyahpepijat', “maklumat”, “amaran”, “ralat” dan “kritikal”. Ini pada asasnya adalah lapisan modul pembalakan, secara ringkasnya. Untuk log pengecualian dengan ralat dalam Python, gunakan fungsi 'logging.exception()'. Fungsi ini menambah laporan dengan status ERROR pada pembalak ini. Adalah dipercayai bahawa parameter adalah untuk penyahpepijatan. Maklumat tentang pengecualian dilampirkan pada laporan pembalakan. Satu-satunya lokasi untuk menggunakan prosedur ini ialah pengendali pengecualian.

Sekarang, mari lihat kod. Pertama, kami mengimport dua perpustakaan - yang pertama ialah pengelogan dan yang kedua ialah jejak balik. Kemudian, kami menggunakan kaedah 'basicConfig' dengan 'logging' dan menentukan tahap sebagai 'logging.Debug'. Satu-satunya hujah yang diambil oleh kaedah 'getLogger()' ialah 'nama'. Oleh itu, kami menggunakannya apabila menggunakan fungsi 'logging.getlogger'. Jika nama diberikan, rujukan kepada contoh logger dengan nama itu dijana; jika tidak, akar dikembalikan. Objek logger yang sama dirujuk oleh banyak operasi getLogger() dengan identiti yang sama.

Kemudian, kita gunakan untuk mencuba, dan seperti yang kita tahu dalam blok cuba, kita menulis kod yang mungkin menimbulkan pengecualian. Dalam kes ini, kami menggunakan 'fungsi saya ()'. Jika situasi yang diberikan tidak sepadan, pengecualian berlaku. Kemudian, kod itu segera melompat ke blok kecuali. Dalam blog pengecualian ini, kami menggunakan 'logging.info'. Di dalamnya, kami menulis mesej yang ingin kami cetak iaitu 'pengecualian berlaku'. Ini kerana jika pengecualian berlaku, ralat hanya berlaku kemudian ia memaparkan mesej ini pada skrin. Tetapi jika ralat tidak berlaku, ia mengabaikan keseluruhan mesej pengecualian.

Kami juga menetapkan 'exc info=True' dengan mesej. Seluruh surih tindanan akan disertakan dalam pengelogan apabila maklumat exc ditetapkan kepada Benar, sama seperti yang berlaku dengan 'logger.exception()'. Satu-satunya perbezaan ialah anda boleh menukar tahap log dengan cepat daripada ralat kepada sesuatu yang lain dengan hanya menukar pembalak.

Memandangkan pengecualian berlaku dalam skrip, baris pertama output ialah mesej 'pengecualian berlaku' diikuti dengan tahap pengelogan yang digunakan dalam skrip iaitu 'maklumat.' Nama pembalak muncul sebagai akar dalam kes ini. Kemudian, panggilan jejak balik muncul, memaparkan modul, baris dan nama fail. Akhirnya, mesej ralat 'fungsi saya' tidak ditakrifkan.

Mari kita bincangkan tentang beberapa lagi kod yang menggunakan pengelogan. Kaedah exception() bermula dengan mengimport perpustakaan untuk pengelogan. Seterusnya, dua pembolehubah - 'm' dan 'n' - dimulakan dan diberi nilai '7' dan '0', masing-masing. Blok cuba kini digunakan dalam langkah seterusnya. Di dalamnya, kami menulis kod yang boleh menyebabkan pengecualian. Pertama, kami mengisytiharkan pembolehubah 'o'. Kemudian, kami menetapkan bahawa 'm' dibahagikan dengan 'n'. Ini menyebabkan pengecualian kerana penyebutnya adalah sifar dan kita tidak boleh membahagi sebarang nombor dengan sifar, yang bermaksud bahawa ralat akan timbul. Akibatnya, kod melompat ke blok kecuali di mana 'logging.error' digunakan. Ralat ialah tahap pembalakan. Jika pengecualian berlaku, kami mencetak mesej atau pernyataan yang menyatakan, 'pengecualian berlaku' dan kami menetapkan 'exc info=true'. Jika kami tidak menetapkannya kepada benar, ia hanya mencetak blok pengecualian dan tidak memaparkan maklumat surih balik.

Oleh kerana kami memilih tahap 'ERROR' dalam skrip kami, ia mula-mula memaparkan akar sebagai nama pembalak, diikuti dengan mesej 'pengecualian berlaku'. Maklumat jejak balik yang termasuk nama fail, nombor baris dan modul kemudian ditunjukkan. Baris seterusnya menunjukkan notis ralat kerana penyebutnya tidak boleh sifar. Dan kerana penyebut adalah sifar dalam kod ini, ralat dirujuk sebagai ralat pembahagi sifar.

Kesimpulan

Dalam artikel ini, kami melihat proses mencetak surih tindanan dalam log Python serta cara menggunakan modul surih balik untuk mencipta surih tindanan. Dalam contoh pertama, pustaka jejak balik telah diimport dan kaedah cuba dan kecuali digunakan. Kod telah ditulis dalam kotak cuba. Jika pengecualian berlaku, ia melompat dengan pantas ke blok pengecualian dan memaparkan pernyataan pengecualian pada skrin. Dalam contoh kedua, kami menggunakan pengelogan yang serupa dengan contoh pertama. Kaedah exception() menggunakan tahap pengelogan 'maklumat' dan 'ralat'. Jika pengecualian berlaku, ia memaparkan pernyataan pengecualian.