Bagaimana Menentukan Pengecualian Khusus di Python? (Dengan Contoh)

Dalam tutorial ini, anda akan belajar bagaimana menentukan pengecualian khusus bergantung pada keperluan anda dengan bantuan contoh.

Python mempunyai banyak pengecualian bawaan yang memaksa program anda mengeluarkan ralat apabila ada masalah dalam program.

Namun, kadang-kadang anda mungkin perlu membuat pengecualian tersuai yang sesuai dengan tujuan anda.

Membuat Pengecualian Tersuai

Di Python, pengguna dapat menentukan pengecualian khusus dengan membuat kelas baru. Kelas pengecualian ini mesti berasal, sama ada secara langsung atau tidak langsung, dari kelas terbina dalam Exception. Sebilangan besar pengecualian terbina dalam 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 dipanggil yang mewarisi dari Exceptionkelas. Pengecualian baru ini, seperti pengecualian lain, dapat dikemukakan menggunakan raisepernyataan dengan mesej ralat pilihan.

Semasa kami mengembangkan program Python yang besar, adalah amalan yang baik untuk meletakkan semua pengecualian yang ditentukan pengguna yang ditimbulkan oleh program kami dalam fail yang terpisah. Banyak modul standard melakukan ini. Mereka menentukan pengecualian mereka secara berasingan sebagai exceptions.pyatau errors.py(umumnya tetapi tidak selalu).

Kelas pengecualian yang ditentukan pengguna dapat melaksanakan segala yang dapat dilakukan oleh kelas biasa, tetapi secara umum kami menjadikannya sederhana dan ringkas. Sebilangan besar pelaksanaan mengisytiharkan kelas asas khusus dan memperoleh kelas pengecualian yang lain dari kelas asas ini. Konsep ini diperjelaskan dalam contoh berikut.

Contoh: Pengecualian yang Ditentukan Pengguna di Python

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

Program ini akan meminta pengguna memasukkan nombor sehingga mereka meneka nombor yang disimpan dengan betul. Untuk membantu mereka mengetahuinya, petunjuk diberikan sama ada tekaan mereka lebih besar atau kurang daripada nombor 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 program ini.

Masukkan nombor: 12 Nilai ini terlalu besar, cuba lagi! Masukkan nombor: 0 Nilai ini terlalu kecil, cuba lagi! Masukkan nombor: 8 Nilai ini terlalu kecil, cuba lagi! Masukkan nombor: 10 Tahniah! Anda meneka dengan betul.

Kami telah menentukan kelas asas yang dipanggil Error.

Dua pengecualian lain ( ValueTooSmallErrordan ValueTooLargeError) yang sebenarnya ditimbulkan oleh program kami berasal dari kelas ini. Ini adalah cara standard untuk menentukan pengecualian yang ditentukan pengguna dalam pengaturcaraan Python, tetapi anda tidak terhad kepada cara ini sahaja.

Menyesuaikan Kelas Pengecualian

Kami dapat menyesuaikan kelas ini lebih jauh untuk menerima hujah lain mengikut keperluan kami.

Untuk belajar mengenai menyesuaikan kelas Pengecualian, anda perlu mempunyai pengetahuan asas mengenai pengaturcaraan Berorientasikan Objek.

Lawati Pengaturcaraan Berorientasikan Objek Python untuk mula belajar mengenai pengaturcaraan Berorientasikan Objek di Python.

Mari 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)

Pengeluaran

 Masukkan amaun gaji: 2000 Traceback (panggilan terakhir terakhir): Fail "", baris 17, kenaikan gaji

Di sini, kami telah mengatasi pembina Exceptionkelas untuk menerima hujah tersuai kami sendiri salarydan message. Kemudian, pembina Exceptionkelas induk dipanggil secara manual dengan self.messagemenggunakan argumen super().

self.salaryAtribut khusus didefinisikan untuk digunakan kemudian.

__str__Kaedah Exceptionkelas yang diwarisi kemudian digunakan untuk memaparkan mesej yang sesuai ketika SalaryNotInRangeErrordiangkat.

Kita juga dapat menyesuaikan __str__kaedah 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)

Pengeluaran

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

Untuk mengetahui lebih lanjut mengenai bagaimana anda dapat menangani pengecualian di Python, lawati Python Exception Handling.

Artikel menarik...