Cara Mendesain Custom Exception

Custom Exception

Seperti yang kita bahas pada artikel sebelumnya tentang custom exception phython adalah

pengecualian yang disesuaikan dengan kebutuhan Anda, dan yang dapat Anda tingkatkan dan tangkap dalam keadaan tertentu. Pengecualian kustom dapat membuat kode Anda lebih mudah dibaca dan kuat, serta mengurangi jumlah kode yang Anda tulis nanti untuk mencoba mencari tahu apa sebenarnya yang salah. 

Python memiliki serangkaian pengecualian bawaan, seperti SyntaxError, TypeError, dan ValueError. Namun, terkadang pengecualian bawaan ini mungkin tidak mencukupi untuk kebutuhan Anda. 

Jenis-Jenis Exception Handling di Python

Seperti yang telah kita bahas sebelumnya, exception handling adalah mekanisme penting dalam Python untuk menangani kesalahan yang tidak terduga selama eksekusi program. Mari kita bahas lebih dalam mengenai jenis-jenis exception handling:

1. Built-in Exceptions

Python menyediakan berbagai macam built-in exceptions untuk mewakili berbagai jenis kesalahan umum. Beberapa contoh yang sering ditemui adalah:

  • ZeroDivisionError: Terjadi ketika mencoba membagi suatu angka dengan nol.
  • ValueError: Terjadi ketika suatu operasi dilakukan pada objek dengan tipe data yang salah.
  • TypeError: Terjadi ketika operasi dilakukan pada objek dengan tipe data yang tidak kompatibel.
  • NameError: Terjadi ketika mencoba mengakses variabel yang belum didefinisikan.
  • IndexError: Terjadi ketika mencoba mengakses indeks di luar jangkauan suatu list atau tuple.
  • KeyError: Terjadi ketika mencoba mengakses key yang tidak ada dalam dictionary.
  • FileNotFoundError: Terjadi ketika mencoba membuka file yang tidak ada.
  • ImportError: Terjadi ketika modul atau package yang diimpor tidak ditemukan.

Contoh:

Python
try:
    x = int(input("Masukkan angka: "))
    y = 10 / x
    print(y)
except ZeroDivisionError:
    print("Tidak bisa membagi dengan nol")
except ValueError:
    print("Input harus berupa angka")

2. Custom Exceptions

Anda juga dapat membuat exception khusus untuk mewakili kesalahan yang spesifik pada aplikasi Anda. Caranya adalah dengan membuat kelas yang mewarisi dari kelas Exception.

Contoh:

Python
class NegativeNumberError(Exception):
    pass

def factorial(n):
    if n < 0:
        raise NegativeNumberError("Bilangan faktorial tidak boleh negatif")
    # ... sisa kode faktorial

3. Struktur try-except-else-finally

  • try: Blok kode yang berpotensi menimbulkan error.
  • except: Blok kode yang akan dijalankan jika terjadi error tertentu.
  • else: Blok kode yang akan dijalankan jika tidak ada error yang terjadi dalam blok try.
  • finally: Blok kode yang akan selalu dijalankan, baik terjadi error atau tidak.

Contoh:

Python
try:
    f = open("myfile.txt", "r")
    data = f.read()
except FileNotFoundError:
    print("File tidak ditemukan")
else:
    print("File berhasil dibaca")
finally:
    f.close()

4. Membangkitkan Exception

Anda dapat secara manual membangkitkan exception menggunakan kata kunci raise.

Python
def divide(x, y):
    if y == 0:
        raise ZeroDivisionError("Pembagian dengan nol tidak diizinkan")
    return x / y

Tips Tambahan:

  • Jadikan spesifik: Semakin spesifik exception yang ditangkap, semakin baik penanganan error yang dilakukan.
  • Gunakan else: Blok else berguna untuk kode yang hanya perlu dijalankan jika tidak ada error.
  • Gunakan finally: Blok finally berguna untuk membersihkan sumber daya, seperti menutup file atau koneksi database.
  • Buat custom exception: Buat custom exception untuk kesalahan yang spesifik pada aplikasi Anda.
  • Logging: Catat informasi tentang exception yang terjadi untuk analisis lebih lanjut.

Berikut klikponsel, berikan tips cara mendesain custom exception yang baik

Cara Mendesain custom exception yang baik

Mendesain custom exception yang baik di Python memerlukan beberapa pertimbangan untuk memastikan exception tersebut informatif, mudah digunakan, dan konsisten dengan standar yang ada. Berikut adalah langkah-langkah dan tips untuk mendesain custom exception yang baik:

1. Pilih Nama Exception yang Jelas dan Deskriptif

  • Pastikan nama exception Anda menggambarkan masalah spesifik yang terjadi.
  • Biasanya, nama exception diakhiri dengan kata “Error” untuk konsistensi, seperti FileFormatError, DatabaseConnectionError, atau InvalidUserInputError.

2. Turunkan dari Kelas Exception yang Tepat

  • Sebagian besar custom exception sebaiknya diturunkan dari Exception atau subkelasnya seperti ValueError, TypeError, dll., tergantung pada konteksnya.
  • Contoh:
    python

    class CustomError(Exception):
    pass

3. Tambahkan Informasi yang Relevan

  • Custom exception sebaiknya membawa informasi yang membantu dalam debugging atau mengatasi masalah.
  • Anda dapat menambahkan atribut tambahan pada exception untuk menyimpan data spesifik.
  • Contoh:
    python

    class InvalidAgeError(ValueError):
    def __init__(self, age, message="Age must be between 0 and 120"):
    self.age = age
    self.message = message
    super().__init__(self.message)

4. Overide __str__ atau __repr__ untuk Pesan yang Lebih Informatif

  • Override metode __str__ atau __repr__ untuk memberikan deskripsi kesalahan yang lebih rinci saat exception tersebut dilempar.
  • Contoh:
    python

    class InvalidAgeError(ValueError):
    def __init__(self, age, message="Age must be between 0 and 120"):
    self.age = age
    self.message = f"{message}: {age} is invalid."
    super().__init__(self.message)

    def __str__(self):
    return self.message

5. Documentasikan Exception dengan Baik

  • Jelaskan kapan exception ini harus digunakan dan data apa yang dibawa olehnya. Hal ini memudahkan developer lain (atau diri Anda sendiri di masa depan) untuk memahami bagaimana dan kapan menggunakan exception tersebut.

6. Pertimbangkan Menggunakan Hierarki Exception

  • Jika Anda memiliki beberapa custom exception terkait, pertimbangkan untuk membuat hierarki exception dengan superclass yang umum.
  • Contoh:
    python

    class MyAppError(Exception):
    """Base class for exceptions in this module."""
    pass

    class DatabaseError(MyAppError):
    """Exception raised for database errors."""
    pass

    class FileFormatError(MyAppError):
    """Exception raised for errors in file format."""
    pass

7. Gunakan Custom Exception dengan Bijak

  • Jangan membuat custom exception untuk setiap jenis kesalahan. Gunakan custom exception hanya ketika exception built-in tidak cukup spesifik atau tidak memberikan informasi yang dibutuhkan.

Contoh Implementasi

python

class InsufficientFundsError(Exception):
def __init__(self, balance, amount):
self.balance = balance
self.amount = amount
self.message = f"Attempted to withdraw {amount}, but only {balance} available."
super().__init__(self.message)

def __str__(self):
return f"{self.__class__.__name__}: {self.message}"

Penggunaan:

python

balance = 100
amount = 150

if amount > balance:
raise InsufficientFundsError(balance, amount)

Dengan pendekatan ini, exception yang Anda buat akan lebih mudah dipahami, dan informasi kesalahan akan lebih bermanfaat dalam proses debugging atau pemeliharaan kode.

Cara Mendesain Custom Exception | Risti | 4.5