Bagaimana Menentukan Pengecualian Kustom dengan Python? (Dengan Contoh)

Dalam tutorial ini, Anda akan belajar bagaimana mendefinisikan pengecualian khusus tergantung pada kebutuhan Anda dengan bantuan contoh.

Python memiliki banyak pengecualian bawaan yang memaksa program Anda mengeluarkan kesalahan ketika ada yang salah dalam program.

Namun, terkadang Anda mungkin perlu membuat pengecualian khusus sendiri yang sesuai dengan tujuan Anda.

Membuat Pengecualian Kustom

Di Python, pengguna dapat menentukan pengecualian khusus dengan membuat kelas baru. Kelas pengecualian ini harus diturunkan, baik secara langsung atau tidak langsung, dari Exceptionkelas bawaan. Sebagian besar pengecualian bawaan juga berasal dari kelas ini.

 >>> 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, kami telah membuat pengecualian yang ditentukan pengguna CustomErroryang disebut mewarisi dari Exceptionkelas. Pengecualian baru ini, seperti pengecualian lainnya, dapat dimunculkan menggunakan raisepernyataan dengan pesan kesalahan opsional.

Saat kita mengembangkan program Python yang besar, itu adalah praktik yang baik untuk menempatkan semua pengecualian yang ditentukan pengguna yang dimunculkan oleh program kita dalam file terpisah. Banyak modul standar melakukan ini. Mereka mendefinisikan pengecualian mereka secara terpisah sebagai exceptions.pyatau errors.py(umumnya tetapi tidak selalu).

Kelas pengecualian yang ditentukan pengguna dapat mengimplementasikan semua yang dapat dilakukan kelas normal, tetapi kami biasanya membuatnya sederhana dan ringkas. Sebagian besar implementasi mendeklarasikan kelas dasar khusus dan mendapatkan kelas pengecualian lainnya dari kelas dasar ini. Konsep ini diperjelas dalam contoh berikut.

Contoh: Pengecualian Buatan Pengguna dengan Python

Dalam contoh ini, kami akan mengilustrasikan bagaimana pengecualian yang ditentukan pengguna dapat digunakan dalam program untuk meningkatkan dan menangkap kesalahan.

Program ini akan meminta pengguna untuk memasukkan angka sampai mereka menebak angka yang disimpan dengan benar. Untuk membantu mereka mengetahuinya, diberikan petunjuk apakah tebakan mereka lebih besar atau kurang dari angka yang disimpan.

 # 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 # you need to guess this number number = 10 # user guesses a number until he/she gets it right while True: try: i_num = int(input("Enter a number: ")) if 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.")

Berikut adalah contoh jalannya program ini.

Masukkan angka: 12 Nilai ini terlalu besar, coba lagi! Masukkan angka: 0 Nilai ini terlalu kecil, coba lagi! Masukkan angka: 8 Nilai ini terlalu kecil, coba lagi! Masukkan angka: 10 Selamat! Anda menebaknya dengan benar.

Kami telah mendefinisikan kelas dasar yang disebut Error.

Dua pengecualian lainnya ( ValueTooSmallErrordan ValueTooLargeError) yang sebenarnya dimunculkan oleh program kami berasal dari kelas ini. Ini adalah cara standar untuk mendefinisikan pengecualian yang ditentukan pengguna dalam pemrograman Python, tetapi Anda tidak terbatas pada cara ini saja.

Menyesuaikan Kelas Pengecualian

Kami selanjutnya dapat menyesuaikan kelas ini untuk menerima argumen lain sesuai kebutuhan kami.

Untuk mempelajari tentang menyesuaikan kelas Exception, Anda harus memiliki pengetahuan dasar tentang pemrograman Berorientasi Objek.

Kunjungi Pemrograman Berorientasi Objek Python untuk mulai belajar tentang pemrograman Berorientasi Objek dengan Python.

Mari kita lihat satu contoh:

 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)

Keluaran

 Masukkan jumlah gaji: 2000 Traceback (panggilan terakhir terakhir): File "", baris 17, di raise SalaryNotInRangeError (gaji) __main __. SalaryNotInRangeError: Gaji tidak dalam kisaran (5000, 15000)

Di sini, kami telah mengganti konstruktor Exceptionkelas untuk menerima argumen kustom kami sendiri salarydan message. Kemudian, konstruktor Exceptionkelas induk dipanggil secara manual dengan self.messageargumen menggunakan super().

self.salaryAtribut khusus ditentukan untuk digunakan nanti.

__str__Metode Exceptionkelas yang diwariskan kemudian digunakan untuk menampilkan pesan yang sesuai saat SalaryNotInRangeErrordimunculkan.

Kami juga dapat menyesuaikan __str__metode itu sendiri dengan menimpanya.

 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)

Keluaran

 Masukkan jumlah gaji: 2000 Traceback (panggilan terakhir terakhir): File "/home/bsoyuj/Desktop/Untitled-1.py", baris 20, di raise SalaryNotInRangeError (gaji) __main __. SalaryNotInRangeError: 2000 -> Gaji tidak masuk ( 5000, 15000)

Untuk mempelajari lebih lanjut tentang bagaimana Anda dapat menangani pengecualian dengan Python, kunjungi Penanganan Pengecualian Python.

Artikel yang menarik...