Anda di halaman 1dari 22

Exception Handling

1. Pengenalan Exception Handling


o Apa itu Exception?
Exception, dalam konteks pemrograman berorientasi objek, adalah suatu kondisi atau
kejadian yang tidak diharapkan atau abnormal yang terjadi selama eksekusi program.
Exception mewakili situasi di mana program tidak dapat melanjutkan eksekusi normalnya
karena terjadi masalah yang tidak dapat diatasi.

Exception dapat terjadi karena berbagai alasan, seperti:


1. Kesalahan masukan pengguna.
2. Kesalahan dalam kode program, seperti pembagian dengan nol.
3. Koneksi ke sumber daya eksternal yang gagal.
4. Kesalahan pembacaan atau penulisan file.
5. Dan banyak kondisi lain yang dapat menggangu eksekusi program.

Contoh-contoh exception yang umum ditemui dalam Bahasa pemrograman termasuk


`TypeError`, `ValueError`, `ZeroDivisionError`, `FileNotFoundError`, dan sebagainya.
Beberapa Bahasa pemrograman juga memungkinkan pengembang untuk membuat
exception khusus (custom exception) sesuai dengan kebutuhan program mereka.

Exception handling adalah Teknik yang digunakan untuk mengatasi exception dengan cara
yang terkendali dan menghindari program berhenti atau crash saat exception terjadi. Dalam
pemrograman berorientasi objek, exception handling sering melibatkan penggunaan blok
`try`, `except`, `finally`, dan `raise` untuk menangkap, menangani, dan mengelola
exception.

o Mengapa exception handling penting?


Berikut beberapa alasan mengapa exception handling penting:
1. Mencegah Crash Aplikasi: Ketika suatu exceptionterjadi dan tidak ditangani, program
cenderung berhenti atau “crash”. Ini dapat mengakibatkan ketidaknyamanan bagi
pengguna dan merusak reputasi aplikasi. Dengan mengatasi exception, Anda dapat
mencegah program berhenti tiba-tiba dan memberikan respons yang lebih baik kepada
pengguna.
2. Manajemen Kesalahan: Exception handling memungkinkan anda untuk mengelola
kesalahan secara terstruktur. Anda dapat mengidentifikasi jenis kesalahan yang terjadi
dan memberikan respons yang sesuai. Misalnya, anda dapat memberikan pesan
kesalahan yang lebih informatif kepada pengguna atau mencatat kesalahan tersebut
untuk analisis lebih lanjut.
3. Peningkatan Kualitas Kode: Dengan menangani exception, anda memaksa diri
sendiri untuk memikirkan berbagai scenario kesalahan yang mungkin terjadi selama
eksekusi program. Ini dapat membantu anda merancang kode yang lebih kuat dan lebih
tahan terhadap kesalahan.
4. Debugging yang Lebih Mudah: Exception handling dapat mempermudah proses
debugging. Ketika suatu kesalahan terjadi, anda dapat melajak jejak exception Kembali
ke tempat di mana kesalahan sebenarnya terjadi. Ini memungkinkan anda untuk
memahami dan memperbaiki masalah lebih cepat.
5. Kontrol Alur Program: Dengan menggunakan exception handling, anda dapat
mengontrol alur program Ketika suatu kesalahan terjadi. Anda dapat menentukan
Tindakan yang diambil, seperti mengulang operasi atau melakukan operasi pemulihan.
6. Kegunaan dalam Pengembangan Besar: Dalam proyek pengembangan perangkat
lunak yang besar, mengatasi exception menjadi sangat penting. Exception handling
memungkinkan tim pengembang untuk bekerja sama dan memahami bagaimana sistem
akan menangani kesalahan di berbagai komponen.
7. Keamanan: Dalam beberapa kasus, exception handling juga dapat digunakan untuk
mengatasi potensi keamanan, seperti serangan SQL injection atau XSS (Cross-Site
Scripting). Dengan menangani input yang tidak aman dengan benar, anda dapat
melindungi sistem anda dari ancaman keamanan.

Dengan demikian, exception handling adalah alat yang penting dalam membangun
perangkat lunak yang andal, responsive, dan aman. Ini membantu memastikan bahwa
program anda tidak hanya berjalan dengan baik dalam situasi normal, tetapi juga dapat
menghadapi kesalahan dan peristiwa tak terduga dengan cara yang terkendali dan ramah
pengguna.
o Bagaimana exception handling bekerja dalam PBO?
Exception handling dalam pemrograman berorientasi objek (PBO) bekerja dengan cara
yang sama dengan exception handling dalam paradigma pemrograman lainnya, tetapi
dalam PBO, anda akan berurusan dengan objek exception yang biasanya merupakan
instance dari kelas-kelas yang sudah ada atau yang anda buat sendiri.

Berikut cara kerja exception handling dalam PBO:


1. Pembuatan Objek Exception: Ketika kesalahan terjadi dalam program, sebuah objek
exception dibuat. Objek ini mengandung informasi tentang jenis kesalahan yang
terjadi, pesan kesalahan, dan detail lainnya yang dapat membantu dalam menemukan
sumber masalah.
2. Melempar Exception: Setelah objek exception dibuat, program “melempar” atau
“mengeluarkan” exception tersebut. Ini berarti program menyerahkan kendali ke
bagian kode yang menangani exception.
3. Penanganan Exception: Bagian kode yang ditulis untuk menangani exception adalah
blok `try-except`. Blok `try` berisi kode yang mungkin menimbulkan exception,
sedangkan blok `except` berisi kode yang akan dijalankan jika exception terjadi.
4. Memilih Jenis Exception: Blok `except` dapat menentukan jenis exception tertentu
yang akan ditangani. Misalnya, anda dapat menentukan `except ValueError` untuk
menangani kesalahan jenis `ValueError`.
5. Eksekusi Blok Except: Jika exceptionyang sesuai terjadi, program akan menjalankan
blok `except` yang cocok. Disini, anda dapat menentukan Tindakan yang sesuai, seperti
memberikan pesan kesalahan kepada pengguna, mencatat kesalahan, atau melakukan
operasi pemulihan.
6. Optional: Blok Else dan Finally: Selain blok `try` dan `except`, anda juga dapat
memiliki blok `else` dan `finally`. Blok `else` akan dijalankan jika tidak ada exception
yang terjadi, sedangkan blok `finally` akan dijalankan setelah blok `try` dan/atau
`except`, dan ini akan dijalankan tanpa peduli apakah exception terjadi atau tidak.
7. Custom Exception: Anda juga dapat membuat kelas exception kustom yang turunan
dari kelas `exception` atau kelas exception bawaan lainnya. Ini memungkinkan anda
untuk menentukan jenis kesalahan yang sesuai dengan aplikasi anda.
8. Propagation Exception: Jika exception yang ditangani tidak dapat diatasi dalam blok
`except`, anda dapat melemparkannya Kembali (propagate) ke tingkat yang lebih
tinggi dalam hierarki panggilan fungsi untuk ditangani di tempat lain.

Contoh sederhana:

Dalam contoh diatas, program mencoba membagi 10 dengan 0, yang akan menghasilkan
`ZeroDivisionError`. Exception ini ditangani dalam blok `except`, dan pesan kesalahan
akan dicetak.

Secara keseluruan, exception handling dalam PBO memungkinkan anda untuk mengelola
kesalahan dengan lebih terstruktur dan fleksibel. Anda dapat menentukan bagaimana
program merespons kesalahan dengan benar dan dapat membantu mencegah program
berhenti tiba-tiba atau memberikan tanggapan yang tidak diinginkan kepada pengguna.

2. Jenis-jenis Exception
o Exception dasar seperti `Exception`, `TypeError`, `ValueError`, dll
1. Exception: Ini adalah kelas dasar untuk semua exception dalam Python. Semua
exception bawaan Python adalah turunan dari `Exception`.
Dalam contoh diatas, Ketika kita mencoba membagi 10 dengan 0, itu akan
memunculkan `SeroDivisionError`, yang merupakan turunan dari `Exception`.
2. TypeError: Exception ini terjadi Ketika ada operasi yang tidak cocok dengan jenis data
yang digunakan.

Dalam contoh diatas, kita mencoba menggabungkan string dengan integer, yang tidak
valid.
3. ValueError: Exception ini terjadi Ketika tipe data benar, tetapi nilainya tidak sesuai
dengan yang diharapkan.

Dalam contoh ini, kita mencoba mengkonversi string “sepuluh” menjadi integer, yang
tidak mungkin dilakukan.
4. ZeroDivisionError: Exception ini terjadi kita mencoba membagi dengan nilai nol.
Dalam contoh ini, kita mencoba membagi 10 dengan 0, merupakan operasi yang tidak
valid.
5. NameError: Exception ini terjadi Ketika mencoba menggunakan variabel yang belum
didefinisikan.

Dalam contoh ini, variabel `x` belum didefinisikan sebelumnya.

Setiap exception memiliki kondisi khusus yang memicu kemunculannya, dan anda dapat
menangani masing-masing exception sesuai dengan kebutuhan dalam blok `except` yang
cocok. Dengan exception handling, anda dapat mengatasi kesalahan dengan lebih baik dan
memberikan tanggapan yang lebih informatif kepada pengguna atau untuk keperluan
debugging.

o Membuat custom exception


Membuat custom exception (pengecualian khusus) dalam pemrograman berorientasi objek
adalah cara yang berguna untuk mengidentifikasi dan menangani kondisi khusus dalam
aplikasi anda. Anda dapat membuat custom exception dengan mengganti kelas exception
bawaan Python atau dengan membuat kelas exception baru yang merupakan turunan dari
`Exception` atau kelas exception yang sesuai.
Berikut adalah cara membuat custom exception beserta contoh sederhana dalam Python:
1. Membuat Custom Exception Class: Anda dapat membuat custom exception class
dengan menurunkannya dari `Exception` atau kelas exception yang sesuai. Beri nama
class tersebut dengan jenis kesalahan yang ingin anda tangani.
2. Melemparkan Custom Exception: Selanjutnya, anda dapat melemparkan custom
exception dalam kode anda Ketika kondisi tertentu terpenuhi.

3. Menangani Custom Exception: Anda dapat menangani exception dengan blok `try-
except` yang sesuai.

Dalam contoh ini, jika kita mencoba menghitung akar kuadrat dari nilai negative (-5),
custom exception `NilaiNegatifError` akan dilemparkan, dan kita dapat menangani
exception tersebut dengan pesan kesalahan yang sesuai.

Custom exception sangat berguna dalam memahami dan menangani situasi khusus dalam
program anda, dan ini membuat kode anda lebih mudah dibaca dan lebih terstruktur. Anda
dapat membuat custom exception untuk berbagai jenis kesalahan yang spesifik untuk
aplikasi anda.
3. Multiple Except Blocks
o Menangani berbagai jenis exception secara terpisah
Menangani berbagai jenis exception secara terpisah adalah praktik yang baik dalam
pengembangan perangkat lunak. Ini memungkinkan anda untuk memberikan respons yang
lebih tepat terhadap jenis kesalahan yang terjadi dalam program anda.

Berikut cara menangani beberapa jenis exception secara terpisah beserta contoh sederhana:
Menangani `ZeroDevisionError` dan `ValueError`:

Dalam contoh di atas, kita menangani dua jenis exception secara terpisah:
1. Jika pengguna memasukkan 0 sebagai input, itu akan memunculkan
`ZeroDevisionError`.
2. Jika pengguna memasukkan bukan angka (misalnya : “abc”), itu akan memunculkan
`ValueError`.

Menangani `FileNotFoundError` dan `PermissionError`:

Dalam contoh di atas, kita menangani dua jenis exception yang terkait dengan berkas:
1. Jika file yang dibuka tidak ada, akan memunculkan `FileNotFoundError`.
2. Jika program tidak memiliki izin akses untuk membaca file, akan memunculkan
`PermissionError`.
Menangani `IndexError` dan `KeyError`:

Dalam contoh di atas, kita menangani dua jenis exception terkait indeks dan kunci:
1. Jika kita mencoba mengakses indeks yang di luar jangkauan daftar, akan memunculkan
`IndexError`.
2. Jika kita mencoba mengakses kunci yang tidak ada dalam kamus, akan memunculkan
`KeyError`.

Dengan menangani exception secara terpisah, anda dapat memberikan pesan kesalahan
yang lebih deskriptif kepada pengguna atau menjalankan Tindakan yang sesuai untuk
setiap jenis kesalahan yang terjadi dalam program anda.

4. Else dan Finally Blocks


o Blok `else` untuk menjalankan kode jika tidak ada exception
Blok `else` dalam pemrograma berorientasi objek digunakan untuk menjalankan kode jika
tidak ada exception yang terjadi dalam blok `try`. Ini memungkinkan anda menjalankan
Tindakan atau kode yang berbeda tergantung pada apakah ada exception atau tidak.

Menggunakan Blok `else`:


Dalam contoh di atas, blok `else` digunakan setelah semua blok `except`. Jika tidak ada
exception yang terjadi dalam blok `try` (misalnya, jika pengguna memasukkan angka yang
valid dan tidak ada pembagian oleh nol), maka blok `else` akan dieksekusi.

Penggunaan blok `else` dalam pengembangan perangkat lunak PBO memungkinkan anda
untuk memiliki lebih banyak kontrol terhadap alur program anda. Anda dapat menjalankan
Tindakan yang berbeda tergantung pada apakah ada exception atau tidak, sehingga
memberikan respons yang lebih baik kepada pengguna atau menjalankan kode tambahan
jika semuanya berjalan dengan lancer.

o Blok `finally` untuk menjalankan kode yang selalu dijalankan, baik ada exception
atau tidak.
Blok `finally` dalam pemrograman berorientasi objek digunakan untuk menjalankan kode
yang selalu dieksekusi, baik ada exception yang terjadi atau tidak. Ini berguna untuk situasi
dimana anda perlu melakukan pembersihan atau penyelesaian tertentu setelah menjalankan
blok `try` dan `except`.

Menggunakan Blok `finally`:

Dalam contoh diatas, dapat dijelaskan:


1. Blok `try` digunakan untuk mengelompokkan kode yang mungkin memunculkan
exception. Dalam contoh diatas, kita mencoba untuk membagi 10 dengan 2, yang tidak
akan memunculkan exception.
2. Jika tidak ada exception yang terjadi dalam blok `try`, maka blok `else` akan dijalankan.
Kode di blok `else` akan menampilkan hasil pembagian.
3. Blok `finally` akan selalu dijalankan, baik ada exception yang terjadi atau tidak. Dalam
contoh ini, kita hanya mencetak pesan bahwa blok `finally` akan selalu dijalankan.

Contoh:

Dalam contoh ini, kita membuka file untuk membaca. Jika file tidak ditemukan, akan
memunculkan `FileNotFoundError`. Namun, blok `finally` akan tetap dijalankan, dan
kita menggunakan ini untuk memastikan file ditutup dengan benar, terlepas dari apakah
exception terjadi atau tidak.

Blok `finally` sering digunakan untuk melakukan pembersihan, seperti menutup koneksi
basis data atau menghapus sumber daya yang digunakan dalam program, sehingga program
anda dapat berperilaku dengan baik dalam semua situasi.

5. Mengulir dan Membuang (Raising and Throwing) Exception


o Membuat dan melemparkan (raise) exception secara eksplisit
Membuat dan melemparkan (raise) exception secara eksplisit adalah Tindakan yang dapat
anda lakukan dalam pemrogram berorientasi objek untuk mengendalikan alur program dan
memberikan pesan kesalahan yang sesuai.
Menggunakan `raise` untuk Membuat dan Melemparkan Exception:

Penjelasan:
1. Dalam contoh diatas, mendefinisikan sebuah fungsi `bagi(angka1, angka2)` yang
menerima dua angka sebagai argument.
2. Didalam fungsi, dilakukan pemeriksaan jika `angka2` adalah 0. Jika ya, maka
menggunakan `raise` untuk melemparkan exception `ZeroDevisionError` dengan
pesan kesalahan yang sesuai.
3. Dalam blok `try`, memanggi fungsi `bagi(10, 0)` yang mencoba membagi 10 dengan
0. Ini akan memunculkan exception `ZeriDevisionError` yang dihasilkan oleh fungsi
`raise`.
4. Dalam blok `except`, program akan menangani exception tersebut dan mencetak pesan
kesalahan yang diberikan.

Contoh:
Dalam contoh di atas, mendefinisikan fungsi `cek_usia(usia)` yang memeriksa jika usia
yang diberikan negatif. Jika usia negatif, maka menggunakan `raise` untuk melemparkan
exception `ValueError` dengan pesan kesalahan yang sesuai. Kemudian mencoba
menggunakan fungsi ini dengan nilai usia negatif (-5), yang akan memunculkan exception
`ValueError`. Dalam blok `except`, program menangani exception tersebut dan mencetak
pesan kesalahan yang diberikan.

Dengan melemparkan exception secara eksplisit, anda dapat mengendalikan alur program
dengan lebih baik dan memberikan pesan kesalahan yang sesuai dengan situasi yang anda
tentukan.

o Menerima exception dengan mengeluarkan (throw) Kembali exception tersebut


Menerima exception dengan mengeluarkan (throw) Kembali (re-throw) exception tersebut
adalah Tindakan yang dapat anda lakukan dalam pemrograman berorientasi objek untuk
menangani exception di satu bagian kode dan kemudian melanjutkan menangani atau
melemparkan exception yang sama atau yang berbeda di bagian kode yang lebih tinggi.

Mengeluarkan (re-throw) Exception:


Penjelasan:
1. Dalam contoh diatas, kita mendefinisikan fungsi `fungsi_r_throw()` yang mencoba
melakukan pembagian oleh nol dalam blok `try`
2. Jika terjadi exception `ZeroDivisionError`, program menangani exception tersebut
dengan mencetak pesan kesalahan dan kemudian menggunakan `raise` tanpa argument
untuk melemparkan (re-throw) exception yang sama. Ini berarti exception
`ZeroDivisionError` akan ditangani di level yang lebih tinggi.
3. Program memanggil `fungsi_r_throw()` dalam blok `try` utama dan menangani
exception `ZeroDivisionError` yang di re-throw dalam blok `except` utama. Program
mencetak pesan kesalahan dan menangani exception ini sesuai kebutuhan.

Contoh:

Dalam contoh di atas, kita mendefinisikan fungsi `baca_file(nama_file)` yang mencoba


membaca isi dari sebuah file. Jika file tidak ditemukan, maka terjadi exception
`FileNotFoundError`, yang ditangani dengan mencetak pesan kesalahan dan kemudian
menggunakan `raise` untuk melemparkan (re-throw) exception `ValueError` yang
berbeda dari level yang lebih tinggi. Hal ini memungkinkan kami untuk memberikan pesan
kesalahan yang lebih spesifik terkait dengan masalah membaca file.
Penggunaan melemparkan Kembali (re-throw) exception dapat membantu anda menangani
dan mengkomunikasikan masalah dengan lebih tepat di berbagai level dalam aplikasi anda.

6. Handling Exception Secara Bertingkat


o Menangani exception dalam nested try-except blocks
Menangani exception dalam nested try-except blocks adalah praktik yang berguna Ketika
anda memiliki beberapa tingkat penenganan exception dalam kode anda, di mana satu blok
`try`-`except` berada di dalam yang lain. Hal ini memungkinkan anda untuk menangani
exception secara lebih terperinci di dalam blok dalam dan memberikan penanganan yang
lebih umum di luar blok.

Menangani Exception dalam Nested Try-Except Blocks:

Penjelasan:
1. Dalam contoh di atas, kita mendefinisikan fungsi `bagikan(angka1, angka2)` yang
mencoba melakukan pembagian `angka1` dengan `angka2` dalam blok `try`.
2. Jika terjadi exception `ZeroDivisionError`, kami menangani exception tersebut di
dalam blok `except` pertama dan mencetak pesan kesalahan yang sesuai.
3. Dalam blok `else`, kita memiliki blok `try` kedua yang mencoba mencetak hasil
pembagian. Dalam situasi tertentu, seperti kesalahan I/O saat mencetak hasil, exception
`IOError` dapat terjadi.
4. Jika terjadi exception `IOError`, program menangani exception tersebut di dalam blok
`except` kedua dan mencetak pesan kesalahan yang sesuai.

7. Exception Handling dalam Kelas


o Menangani exception dalam metode kelas.
Menangani exception dalam metode kelas adalah praktik yang umum dalam pemrograman
berorientasi objek. Ini memungkinkan anda untuk menangani exception yang terkait
dengan operasi yang spesifik untuk objek yang sesuai dengan kelas tersebut.

Contoh:

1. Pada contoh di atas, kelas `Pengguna` dengan metode `__init__` yang menginisialisasi
objek `Pengguna` dengan nama dan poin awal.
2. Metode `tambah_poin()` digunakan untuk menambahkan poin ke objek `Pengguna`.
Dalam metode ini, menggunakan `try` untuk menangani exception yang mungkin
terjadi.
3. Jika jumlah poin yang akan ditambahkan kurang dari nol, program menggunakan
`raise` untuk menghasilkan exception `ValueError` dengan pesan yang sesuai.
4. Exception yang terjadi akan ditangani dalam blok `except`, dan pesan kesalahan akan
dicetak.
5. Objek `pengguna1` dari kelas `Pengguna` dan memanggil metode `tambah_poin()`
dengan argument yang berbeda. Yang pertama berhasil manambahkan poin, sedangkan
yang kedua mencoba menambahkan poin negatif, yang akan menghasilkan exception.
Contoh diatas adalah bagaimana anda dapat menangani exception dalam metode kelas
untuk memastikan bahwa operasi yang spesifik untuk objek tersebut dapat dijalankan
dengan benar. Hal ini membantu untuk menjaga konsistensi dan keandalan dalam aplikasi
anda.

o Menggunakan `__str__` dan `__repr__` untuk mengatur pesan exception


Menggunakan metode `__str__` dan `__repr__` dalam pemrograman berorientasi objek
memungkinkan anda untuk mengatur pesan exception yang lebih informatif. Metode
`__str__` digunakan untuk menghasilkan representasi string yang dapat dibaca manusi dari
objek. Sedangkan metode `__repr__` menghasilkan representasi string yang dapat
digunakan untuk mereplikasi objek.
Contoh:
Penjelasan:
1. Dalam contoh di atas, kelas `NilaiTidakValid` adalah subclass dari kelas `Exception`.
Dalam contoh menggunakan metode `__init__` untuk menginisialisasi objek exception
dengan nilai dan pesan kesalahan.
2. Dalam metode `__str__` menghasilkan pesan string yang dicetak saat exception terjadi.
Pesan ini akan memberikan informasi yang lebih berguna tentang nilai yang tidak valid.
3. Dalam metode `__repr__` menghasilkan representasi string yang dapat digunakan
untuk mereplikasi objek. Ini berguna untuk debugging dan pencatatan.
4. Fungsi `validasi_nilai()` memeriksa apakah nilai berada dalam rentang yang valid (0
hingga 100). Jika nilai tidak valid, akan memunculkan exception `NilaiTidakValid`
dengan nilai dan pesan yang sesuai.
5. Dalam blok `try` akan mencoba memanggila fungsi `validasi_nilai()` dengan nilai
yang tidak valid (-10). Ini akan menghasilkan exception `NilaiTidakValid`.
6. Dalam blok `except` akan menangani exception `NilaiTidakValid` dan mencetak pesan
kesalahan yang lebih informatif.

Menggunakan metode `__str__` dan `__repr__` dalam pesan exception membantu dalam
debugging dan pemahaman lebih baik tentang masalah yang terjadi dalam program anda.
8. Best Practices dalam Exception Handling
o Menentukan level detail pesan exception
Dalam penanganan exception, penting untuk mempertimbangkan tingkat detail pesan
exception yang akan anda berikan. Ini berguna unutk debugging dan pemahaman masalah
yang terjadi dalam program anda. Berikut best practices terkait dengan menentukan level
detail pesan exception:
1. Berikan Pesan yang Informatif: Pastikan pesan exception memberikan informasi
yang cukup kepada pengembang atau pengguna akhir untuk memahami masalah yang
terjadi.
2. Jangan Telalu Detail: Hindari memberikan terlalu banyak detail yang mungkin
mengungkapkan informasi sensitif atau rahasia dalam pesan exception. Ini adalah
masalah keamanan.
3. Gunakan Pesan Standar: Untuk jenis exception umum, seperti `ZeroDivisionError`
atau `ValueError`, anda dapat mengandalkan pesan bawaan Python yang sudah cukup
informatif.
4. Custom Exception: Jika anda membuat exception kustom, pastikan pesannya
memberikan konteks yang memadai. Ini dapat membantu pengembang memahami
dimana, bagaimana, dan mengapa exception itu terjadi.

Contoh:

Pada contoh di atas, kita menggunakan exception kustom `NilaiTidakValid`. Pesan


exception tersebut memberikan informasi yang cukup untuk memahami bahwa nilai tidak
valid, dan pesan tersebut mencakup nilai yang menyebabkan exception. Namun, pesan
tersebut tidak terlalu detail sehingga tidak menggungkapkan informasi rahasia.

Pilihan untuk tingkat detail pesan exception harus didasarkan pada kebutuhan aplikasi dan
tingkat keamanan yang diperlukan. Jika program anda mengelola informasi sensitif,
pastikan untuk tidak memberikan informasi yang dapat dimanfaatkan oleh pihak yang tidak
berwenang. Sebaliknya, jika anda membutuhkan bantuan dalam debugging, pesan
exception yang informatif dapat sangat berguna.
o Menyederhanakan kode exception handling
Dalam penanganan exception, menyederhanakan kode bisa menjadi praktik terbaik karena
itu membuat kode lebih mudah dibaca dan dipahami.

Best Practices dalam menyederhanakan kode exception handling:


1. Gunakan Exception kustom: Daripada menangani banyak jenis exception yang sama
dengan blok `except` terpisah, pertimbangkan untuk membuat exception kustom yang
menggabungkan semua kasus tersebut.
2. Tangani Exception yang Memiliki Aksi yang Sama: Jika beberapa jenis exception
memerlukan Tindakan yang sama, anda dapat menangani mereka dalam satu blok
`except`.
3. Hindari Blok `try` yang Terlalu Besar: Usahakan agar blok `try` tidak terlalu besar
dan hanya mencakup kode yang mungkin memunculkan exception. Ini membantu
dalam mempersempit area potensial permasalahan.
4. Gunakan Blok `finally` Secukupnya: Blok `finally` digunakan untuk membersihkan
sumber daya seperti file atau koneksi database setelah penanganan exception. Gunakan
dengan bijak dan hanya jika diperlukan.

Contoh:
Dalam contoh di atas, kita menggunakan exception kustom `DatabaseConnectionError`
untuk menangani semua masalah terkait koneksi database yang mungkin terjadi. Ini
menyederhanakan kode karena kita hanya perlu satu blok `except` untuk menangani semua
jenis kesalahan koneksi database.

Selain itu, kita menggunakan blok `finally` untuk menutup koneksi ke database atau
melakukan pembersihan lainnya. Hal ini memungkinkan kode tetap bersih dan memastikan
bahwa sumber daya dibersihkan, bahkan jika ada exception yang terjadi.

o Memisahkan logika bisnis dan exception handling


Pemisahan logika bisnis dan penanganan exception adalah praktik terbaik dalam
pengembangan perangkat lunak. Ini membantu menjaga kode yang bersih, mudah
dipahami, dan lebih terorganisir.
Best Practices dalam Memisahkan Logika Bisnis dan Exception Handling:
1. Gunakan Blok `try-except` Terpisah: Pisahkan blok `try-except` yang menangani
exception dari logika bisnis utama. Ini membuat logika bisnis tetap fokus pada
tugasnya.
2. Exception Propagation: Tangani exception di tingkat yang sesuai, dan biarkan
exception lebih spesifik naik ke tingkat yang lebih tinggi jika perlu. Ini memungkinkan
penanganan exception yang lebih baik di tingkat yang lebih tinggi.
3. Gunakan Fungsi dan Metode: Pisahkan logika bisnis menjadi fungsi atau metode
terpisah. Ini memungkinkan anda untuk menangani exception dalam konteks yang
sesuai.
Contoh:

Dalam contoh di atas, kita memisahkan logika bisnis validasi nilai dari logika bisnis
menyimpan data ke database. Selain itu, kita menangani exception validasi secara terpisah
dalam blok `try-except` yang relevan, dan kita menggunakan exception kustom
`NilaiTidakValid` untuk menandai kesalahan validasi. Ini memisahkan logika bisnis dari
penanganan exception dengan baik.

Anda mungkin juga menyukai