Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Menguasai Exception Kustom Python: Panduan Praktis

Exception Kustom Python

Dalam tutorial ini, Anda akan mempelajari cara mendefinisikan exception kustom yang disesuaikan dengan kebutuhan, diilustrasikan dengan contoh praktis.

Python menyediakan banyak exception bawaan yang menyinyalikan error saat program menemui kondisi yang tidak terduga. Namun, ada kalanya bawaan tidak secara tepat menggambarkan masalah yang Anda hadapi. Dalam kasus tersebut, Anda dapat membuat tipe exception kustom Anda sendiri untuk membuat kode Anda lebih jelas dan lebih mudah dipelihara.


Membuat Exception Kustom

Mendefinisikan exception kustom di Python sederhana: buat kelas baru yang mewarisi dari kelas bawaan Exception (atau salah satu subclassnya). Sebagian besar exception standar berasal dari Exception, sehingga kelas kustom Anda akan terintegrasi dengan mulus dengan sistem penanganan error Python.

>>> class CustomError(Exception):
...     pass
...
>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError
>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

Di sini, CustomError adalah exception yang ditentukan pengguna yang mewarisi dari Exception. Ia dapat dilemparkan dengan raise dan pesan opsional. Saat membangun proyek besar, praktik umum adalah menempatkan semua exception kustom dalam modul terpisah (misalnya, exceptions.py atau errors.py) sehingga mereka mudah ditemukan dan dipelihara.


Contoh: Exception yang Ditetapkan Pengguna di Python

Program berikut menunjukkan bagaimana exception kustom dapat digunakan untuk memandu masukan pengguna. Programnya terus meminta pengguna memasukkan angka sampai mereka menebak nilai yang tersimpan. Program memberikan petunjuk—apakah tebakan terlalu tinggi atau terlalu rendah—dengan melempar exception yang disesuaikan.

# define Python user-defined exceptions
class Error(Exception):
    """Base class for other exceptions"""
    pass

class ValueTooSmallError(Error):
    """Raised when the input value is too small"""
    pass

class ValueTooLargeError(Error):
    """Raised when the input value is too large"""
    pass

# the target number
number = 10

# keep asking until the guess is correct
while True:
    try:
        i_num = int(input("Enter a number: "))
        if i_num < number:
            raise ValueTooSmallError
        elif i_num > number:
            raise ValueTooLargeError
        break
    except ValueTooSmallError:
        print("This value is too small, try again!")
        print()
    except ValueTooLargeError:
        print("This value is too large, try again!")
        print()
print("Congratulations! You guessed it correctly.")

Contoh eksekusi:

Enter a number: 12 This value is too large, try again! Enter a number: 0 This value is too small, try again! Enter a number: 8 This value is too small, try again! Enter a number: 10 Congratulations! You guessed it correctly.

Dalam contoh ini, kelas dasar Error menyediakan nenek moyang umum untuk dua tipe error spesifik. Pendekatan ini menjaga hierarki exception tetap jelas dan memungkinkan Anda untuk menangkap semua error terkait dengan satu klausa except Error jika diinginkan.


Menyesuaikan Kelas Exception

Exception kustom juga dapat menyimpan data tambahan atau menyajikan pesan yang lebih informatif. Ini memerlukan penggantian __init__ dan opsional __str__. Berikut ini mengilustrasikan skenario validasi gaji.

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.
    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """
    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)

salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Output

Enter salary amount: 2000 Traceback (most recent call last): File "<string>", line 17, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

Dengan mengganti __init__, exception dapat membawa nilai yang melanggar. Jika Anda ingin representasi string kustom, ganti __str__ seperti yang ditunjukkan di bawah:

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.
    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """
    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)
    def __str__(self):
        return f'{self.salary} → {self.message}'

salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Output

Enter salary amount: 2000 Traceback (most recent call last): File "/home/user/untitled.py", line 20, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: 2000 → Salary is not in (5000, 15000) range

Untuk penjelasan yang lebih dalam tentang pola penanganan exception, konsultasikan tutorial Python Exception Handling.

Untuk mempelajari lebih lanjut tentang merancang aplikasi yang andal, jelajahi Python Object-Oriented Programming.

Python

  1. Menguasai Tipe Data Python: Panduan Praktis
  2. Menguasai Operator Python: Panduan Komprehensif
  3. Menguasai Pernyataan Pass Python: Panduan Praktis
  4. Menguasai Argumen Fungsi Python: Posisi, Kata Kunci, dan Parameter Default
  5. Menguasai Kamus Python: Pembuatan, Manipulasi, dan Teknik Lanjutan
  6. Menguasai Error dan Exception Bawaan Python
  7. Menguasai Pemrograman Berorientasi Objek Python: Kelas, Warisan, Enkapsulasi & Polimorfisme
  8. Menguasai Warisan Python: Konsep, Sintaks, dan Contoh Praktis
  9. Menguasai Iterator Python: Cara Kerja dan Membuat Sendiri
  10. Memahami type() dan isinstance() dalam Python: Contoh Praktis