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 Exception
kelas 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 CustomError
yang disebut mewarisi dari Exception
kelas. Pengecualian baru ini, seperti pengecualian lainnya, dapat dimunculkan menggunakan raise
pernyataan 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.py
atau 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 ( ValueTooSmallError
dan 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 Exception
kelas untuk menerima argumen kustom kami sendiri salary
dan message
. Kemudian, konstruktor Exception
kelas induk dipanggil secara manual dengan self.message
argumen menggunakan super()
.
self.salary
Atribut khusus ditentukan untuk digunakan nanti.
__str__
Metode Exception
kelas yang diwariskan kemudian digunakan untuk menampilkan pesan yang sesuai saat SalaryNotInRangeError
dimunculkan.
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.