Bagaimana cara mencatat pesan pengecualian dengan python?

Dalam pengembangan perangkat lunak, berbagai jenis kesalahan dapat terjadi. Itu bisa berupa kesalahan sintaksis, kesalahan logis, atau kesalahan runtime

Kesalahan sintaks kemungkinan besar terjadi selama fase pengembangan awal dan merupakan hasil dari sintaks yang salah. Kesalahan sintaks dapat ditangkap dengan mudah saat program dikompilasi untuk dieksekusi

Kesalahan logis, di sisi lain, adalah hasil dari implementasi logis yang tidak tepat. Contohnya adalah program yang mengakses daftar yang tidak disortir dengan asumsi itu akan diurutkan. Kesalahan logis adalah yang paling sulit dilacak

Kesalahan runtime adalah kesalahan paling menarik yang terjadi, jika kami tidak mempertimbangkan semua kasus sudut. Contohnya adalah mencoba mengakses file yang tidak ada

Dalam tutorial ini, kita akan belajar cara menangani error di Python dan cara mencatat error untuk pemahaman yang lebih baik tentang apa yang salah dalam aplikasi

Menangani Pengecualian dengan Python

Mari kita mulai dengan program sederhana untuk menjumlahkan dua angka dengan Python. Program kami mengambil dua parameter sebagai input dan mencetak jumlahnya. Berikut adalah program Python untuk menjumlahkan dua angka

1
def addNumbers(a, b):
2
    print a + b
3
4
addNumbers(5, 10)

Coba jalankan program Python di atas, dan Anda harus mencetak jumlahnya

2
_03

Saat menulis program di atas, kami tidak benar-benar mempertimbangkan fakta bahwa ada yang salah. Bagaimana jika salah satu parameter yang dilewatkan bukan angka?

1
addNumbers('', 10)

Kami belum menangani kasus itu, maka program kami akan macet dengan pesan kesalahan berikut

1
def addNumbers(a, b):
0
2
def addNumbers(a, b):
2
3
def addNumbers(a, b):
4
4
def addNumbers(a, b):
6
def addNumbers(a, b):
7
def addNumbers(a, b):
8
def addNumbers(a, b):
9
2
0

Kami dapat menangani masalah di atas dengan memeriksa apakah parameter yang dikirimkan adalah bilangan bulat. Tapi itu tidak akan menyelesaikan masalah. Bagaimana jika kode rusak karena alasan lain dan menyebabkan program mogok? . Bahkan jika terjadi kesalahan yang tidak diketahui, kode harus cukup kuat untuk menangani kerusakan dengan baik dan memberi tahu pengguna bahwa ada sesuatu yang salah

Menangani Pengecualian Menggunakan 204 dan 205

Dalam Python, kami menggunakan pernyataan

2
_04 dan
2
05 untuk menangani pengecualian. Setiap kali kode rusak, pengecualian dilemparkan tanpa merusak program. Mari ubah program tambah angka untuk menyertakan pernyataan
2
04 dan
2
05

1
def addNumbers(a, b):
2
2
4
3
2
6
4
2
8________1______7
    print a + b
0
def addNumbers(a, b):
9
    print a + b
2
    print a + b
3
    print a + b
4

Python akan memproses semua kode di dalam pernyataan

2
_04 dan
2
05. Saat menemui kesalahan, kontrol diteruskan ke blok
2
05, melewatkan kode di antaranya

Seperti yang terlihat pada kode di atas, kita telah memindahkan kode kita ke dalam pernyataan

2
04 dan
2
05. Coba jalankan program dan itu akan menampilkan pesan kesalahan alih-alih merusak program. Alasan pengecualian juga dikembalikan sebagai pesan pengecualian

Metode di atas menangani pengecualian tak terduga. Mari kita lihat cara menangani pengecualian yang diharapkan. Asumsikan bahwa kita mencoba membaca file tertentu menggunakan program Python kita, tetapi file tersebut tidak ada. Dalam hal ini, kami akan menangani pengecualian dan memberi tahu pengguna bahwa file tersebut tidak ada saat itu terjadi. Lihat kode membaca file

1
    print a + b
6
2
2
4
3
3
0
4
3
2
def addNumbers(a, b):
7
3
4
def addNumbers(a, b):
9
3
6
    print a + b
3
3
8_______4_______9_______

Pada kode di atas, kita telah menangani pembacaan file di dalam

2
15 exception handler. Jika kode rusak karena
2
_16 tidak tersedia, kesalahan akan ditangani di dalam penangan
2
15. Mirip dengan pengecualian
2
_15, ada lebih banyak pengecualian standar seperti
2
19,
2
20, dan
2
21, untuk menyebutkan beberapa

Beberapa Pengecualian

Kami dapat menangani beberapa pengecualian sekaligus dengan memukul pengecualian standar seperti yang ditunjukkan

1
    print a + b
6
2
4
4
3
4
6
4
4
8
def addNumbers(a, b):
7
addNumbers(5, 10)
0
def addNumbers(a, b):
9
4
0

Kode di atas akan memunculkan pengecualian

2
_15 dan
2
23 saat program dijalankan

2
24 Klausa

Asumsikan bahwa kita menggunakan sumber daya tertentu dalam program Python kita. Selama eksekusi program, ia mengalami kesalahan dan hanya dieksekusi setengah jalan. Dalam hal ini, sumber daya akan ditahan secara tidak perlu. Kami dapat membersihkan sumber daya tersebut menggunakan klausa

2
24. Lihatlah kode di bawah ini

1
    print a + b
6
2
addNumbers(5, 10)
6
3
2
4
4
1
0
def addNumbers(a, b):
7
1
2
def addNumbers(a, b):
9
1
4
    print a + b
3________0______6_______4_______9_______

Jika, selama eksekusi kode di atas, pengecualian dimunculkan saat membaca file,

2
26 akan ditutup di blok
2
24

Pengecualian Buatan Pengguna

Sejauh ini, kita telah membahas pengecualian yang disediakan oleh Python, tetapi bagaimana jika Anda ingin menentukan pengecualian khusus Anda sendiri? . Keuntungan membuat pengecualian yang ditentukan pengguna adalah bahwa mereka masuk akal dalam program kami. Misalnya, Anda memiliki program yang memastikan bahwa harga diskon suatu barang tidak lebih dari harga jual. Mari buat pengecualian khusus untuk jenis kesalahan ini

1
addNumbers('', 10)
0
2
addNumbers('', 10)
2

Selanjutnya, tambahkan pengecualian sebagai berikut

1
addNumbers('', 10)
4
2
addNumbers('', 10)
6
3
addNumbers('', 10)
8
4
1
0
def addNumbers(a, b):
7
1
2

Dalam kode di atas, pernyataan

2
29 memaksa pengecualian
2
30 terjadi

Sekarang, jika Anda memanggil fungsi dengan nilai di mana

2
31 lebih besar dari harga, Anda akan mendapatkan kesalahan, seperti yang ditunjukkan di bawah ini

1
1
4
2
1
6
3
1
8
4
def addNumbers(a, b):
00
def addNumbers(a, b):
7
def addNumbers(a, b):
02
def addNumbers(a, b):
9
def addNumbers(a, b):
04

Kesalahan di atas tidak memberikan pesan deskriptif;

1
addNumbers('', 10)
0
2
def addNumbers(a, b):
08
3
def addNumbers(a, b):
10
4
def addNumbers(a, b):
12
def addNumbers(a, b):
7
    print a + b
2
def addNumbers(a, b):
9
def addNumbers(a, b):
16
    print a + b
3________1______18

Sekarang, mari terapkan kesalahan dan panggil fungsi kita

1
addNumbers('', 10)
4
2
addNumbers('', 10)
6
3
def addNumbers(a, b):
24
4
1
0
def addNumbers(a, b):
7
1
2
def addNumbers(a, b):
9
def addNumbers(a, b):
30
    print a + b
3
def addNumbers(a, b):
32

Sekarang, jika Anda memanggil fungsi tersebut, Anda akan mendapatkan kesalahan berikut

1
def addNumbers(a, b):
34
2
1
4
3
def addNumbers(a, b):
38
4
1
8
def addNumbers(a, b):
7
def addNumbers(a, b):
42
def addNumbers(a, b):
9
def addNumbers(a, b):
44
    print a + b
3
def addNumbers(a, b):
46

Masuk dengan Python

Ketika terjadi kesalahan dalam aplikasi, akan lebih mudah untuk melakukan debug jika kita mengetahui sumber kesalahannya. Saat pengecualian muncul, kami dapat mencatat informasi yang diperlukan untuk melacak masalah. Python menyediakan perpustakaan logging yang sederhana dan kuat. Mari kita lihat cara menggunakan logging di Python

1
    print a + b
6
2
def addNumbers(a, b):
50
3
addNumbers(5, 10)
6
4
2
4
def addNumbers(a, b):
7
def addNumbers(a, b):
56
def addNumbers(a, b):
9
1
0
    print a + b
3
4
8
3
9
1
2
def addNumbers(a, b):
63
1
4
def addNumbers(a, b):
65
1
6
def addNumbers(a, b):
67
def addNumbers(a, b):
68

Seperti yang terlihat pada kode di atas, pertama-tama kita perlu mengimpor library logging Python dan kemudian menginisialisasi logger dengan nama file log dan level logging. Ada lima level logging.

2
32,
2
33,
2
34,
2
35, dan
2
36. Di sini kita telah menetapkan level logging ke
2
33, sehingga setiap pesan yang memiliki level
2
33 akan dicatat

Mendapatkan Stack Trace

Dalam kode di atas kami memiliki satu file program, jadi lebih mudah untuk mengetahui di mana kesalahan itu terjadi. Tapi apa yang kita lakukan ketika banyak file program terlibat? . Jejak tumpukan pengecualian dapat dicatat seperti yang ditunjukkan

1
def addNumbers(a, b):
70
2
3
def addNumbers(a, b):
73
4
def addNumbers(a, b):
75
def addNumbers(a, b):
7
def addNumbers(a, b):
9
    print a + b
6
    print a + b
3
def addNumbers(a, b):
80
3
9
2
4
def addNumbers(a, b):
63
1
0
def addNumbers(a, b):
65
1
2
def addNumbers(a, b):
67
1
4
def addNumbers(a, b):
89
1
6
def addNumbers(a, b):
91
def addNumbers(a, b):
92

Jika Anda mencoba menjalankan program di atas, saat memunculkan pengecualian, kesalahan berikut akan dicatat dalam file log

1
def addNumbers(a, b):
94
2
def addNumbers(a, b):
0
3
def addNumbers(a, b):
98
4
2
00
def addNumbers(a, b):
7
2
02

Membungkusnya

Dalam tutorial ini, kita melihat cara memulai penanganan error di Python dan menggunakan modul logging untuk mencatat error. Kami melihat penggunaan pernyataan

2
_04,
2
05, dan
2
24, yang cukup berguna saat menangani penanganan kesalahan di Python. Untuk informasi lebih rinci, saya akan merekomendasikan membaca dokumentasi resmi tentang logging. Lihat juga dokumentasi untuk menangani pengecualian dengan Python

Postingan ini telah diperbarui dengan kontribusi dari Esther Vaati. Esther adalah pengembang perangkat lunak dan penulis untuk Envato Tuts+

Bagaimana cara mencatat pengecualian di logger?

Untuk mencatat pengecualian yang ditangani . Gunakan Coba. Tangkap blok untuk menangkap pengecualian. Letakkan kode yang dapat menghasilkan pengecualian di blok Coba. Create the method that will generate the exception information. Use a Try...Catch block to catch the exception. Put the code that could generate an exception in the Try block.

Bagaimana cara mencatat traceback pengecualian dengan Python?

Setelah menangkap pengecualian, Anda dapat menangkap dan mencatat pesan dengan info pengecualian (termasuk pelacakan balik tumpukan penuh), menggunakan pencatatan log. exception() atau logging. kesalahan() . Dalam kedua kasus, pesan Error yang terjadi dicatat dengan level ERROR pada root logger bersama dengan informasi pengecualian.

Bagaimana Anda menangkap kesalahan dengan Python?

Blok coba dan kecuali di Python digunakan untuk menangkap dan menangani pengecualian . Python mengeksekusi kode mengikuti pernyataan try sebagai bagian "normal" dari program. Kode yang mengikuti pernyataan exception adalah respons program terhadap pengecualian apa pun di klausa try sebelumnya.

Bagaimana Anda mencetak detail pengecualian dengan Python?

Jika Anda akan mencetak pengecualian, lebih baik menggunakan print(repr(e)) ; dasar Pengecualian. Implementasi __str__ hanya mengembalikan pesan pengecualian, bukan jenisnya. Atau, gunakan modul traceback, yang memiliki metode untuk mencetak pengecualian saat ini, diformat, atau traceback penuh.