Python
Dalam tutorial ini, Anda akan belajar cara mendefinisikan pengecualian khusus tergantung pada kebutuhan Anda dengan bantuan contoh.
Python memiliki banyak pengecualian bawaan yang memaksa program Anda untuk menampilkan kesalahan saat ada yang salah dalam program.
Namun, terkadang Anda mungkin perlu membuat pengecualian khusus Anda sendiri yang sesuai dengan tujuan Anda.
Di Python, pengguna dapat menentukan pengecualian khusus dengan membuat kelas baru. Kelas pengecualian ini harus diturunkan, baik secara langsung maupun tidak langsung, dari Exception
. bawaan kelas. Sebagian besar pengecualian bawaan juga diturunkan 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 yang disebut CustomError
yang 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, 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 oleh kelas normal, tetapi kami biasanya membuatnya sederhana dan ringkas. Sebagian besar implementasi mendeklarasikan kelas dasar khusus dan menurunkan kelas pengecualian lain dari kelas dasar ini. Konsep ini dibuat lebih jelas dalam contoh berikut.
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 nomor sampai mereka menebak nomor yang disimpan dengan benar. Untuk membantu mereka mengetahuinya, petunjuk diberikan apakah tebakan mereka lebih besar atau lebih kecil 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 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.")
Berikut adalah contoh menjalankan program ini.
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.
Kami telah mendefinisikan kelas dasar yang disebut Error
.
Dua pengecualian lainnya (ValueTooSmallError
dan ValueTooLargeError
) yang sebenarnya dimunculkan oleh program kita 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.
Kami selanjutnya dapat menyesuaikan kelas ini untuk menerima argumen lain sesuai kebutuhan kami.
Untuk mempelajari tentang menyesuaikan kelas Pengecualian, 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 salah satu contohnya:
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
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
Di sini, kami telah mengganti konstruktor Exception
kelas untuk menerima argumen kustom kita sendiri salary
dan message
. Kemudian, konstruktor induk Exception
class dipanggil secara manual dengan self.message
argumen menggunakan super()
.
self.salary
khusus atribut didefinisikan untuk digunakan nanti.
__str__
inherited yang diwarisi metode Exception
class kemudian digunakan untuk menampilkan pesan yang sesuai ketika SalaryNotInRangeError
dibangkitkan.
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
Enter salary amount: 2000 Traceback (most recent call last): File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range
Untuk mempelajari lebih lanjut tentang bagaimana Anda dapat menangani pengecualian dengan Python, kunjungi Penanganan Pengecualian Python.
Python
OOP dengan Python OOP dengan Python adalah pendekatan pemrograman yang berfokus pada penggunaan objek dan kelas yang sama dengan bahasa pemrograman umum lainnya. Objek dapat berupa entitas dunia nyata apa pun. Python memungkinkan pengembang untuk mengembangkan aplikasi menggunakan pendekatan OOP de
Saya melihat banyak orang menangani pengecualian dengan cara yang salah. Mungkin ini juga berlaku untuk Anda. Apakah situasi berikut terdengar familiar? Anda sedang menulis beberapa kode, tetapi Anda tahu bahwa perpustakaan yang Anda gunakan mungkin menimbulkan pengecualian. Anda tidak ingat yang m
Slot kelas Python adalah fitur yang tidak banyak diketahui oleh programmer. Di kelas slotted, kami secara eksplisit mendefinisikan bidang yang diizinkan untuk dimiliki oleh kelas kami menggunakan nama bidang ajaib __slots__ . Ini memiliki beberapa keuntungan: Objek yang dibuat dari kelas akan memak
Kelas data Python adalah kelas Python biasa yang memiliki @dataclass penghias. Ini khusus dibuat untuk menyimpan data. Sejak Python versi 3.7, Python menawarkan kelas data melalui modul bawaan yang disebut dataclass . Ada beberapa keunggulan dibandingkan kelas Python biasa yang akan kita jelajahi di