Python - Penyataan Khas Buatan Pengguna

Hello there, future Python wizards! Today, we're going to embark on an exciting journey into the world of user-defined exceptions in Python. Don't worry if you're new to programming; I'll guide you through this adventure step by step, just like I've done for countless students over my years of teaching. So, grab your virtual wands (keyboards), and let's dive in!

Python - User-defined Exception

Penyataan Khas Buatan Pengguna di Python

Sebelum kita mula untuk membuat penyataan khas kita sendiri, mari kita secara cepat mengingatkan diri tentang penyataan khas. Bayangkan anda sedang untuk memasakkan makanan yang sedap, tetapi tiba-tiba anda menyadari anda kehabisan bahan penting. Itu adalah seperti penyataan khas dalam pemrograman – itu adalah situasi yang tidak dijangka yang mengganggu aliran normal kod anda.

Python datang dengan banyak penyataan khas bawaan, seperti ValueError, TypeError, dan ZeroDivisionError. Tetapi kadang-kadang, kita perlu untuk membuat penyataan khas kita sendiri untuk menguruskan situasi yang unik di atas program kita. Itu adalah di mana penyataan khas buatan pengguna menjadi berguna!

Cara untuk Membuat Penyataan Khas Buatan Pengguna

Membuat penyataan khas anda sendiri adalah sama mudah seperti untuk membaking kue (baiklah, resepi kue yang mudah). Semua yang anda perlu lakukan adalah untuk membuat kelas baru yang mewarisi dari kelas bawaan Exception atau mana-mana anak kelasnya. Mari lihat contoh yang simple:

class MySpecialError(Exception):
pass

Itu saja! Anda baru saja membuat penyataan khas buatan pengguna pertama anda. Perintah pass digunakan kerana kita tidak perlu untuk menambahkan fungsi tambahan kepada kelas penyataan khas kita.

Tetapi apa jika kita ingin penyataan khas kita untuk menjadi sedikit lebih informatif? Mari kita buat lagi satu:

class ValueTooLargeError(Exception):
def __init__(self, message, value):
self.message = message
self.value = value

Dalam contoh ini, kita telah menambahkan method __init__ kepada kelas penyataan khas kita. Ini membolehkan kita untuk memassing maklumat tambahan apabila kita melepaskan penyataan khas.

Mengangkat Penyataan Khas Buatan Pengguna

Sekarang bahwa kita ada penyataan khas kita sendiri, mari kita lihat bagaimana kita boleh menggunakannya di atas kod kita. Mengangkat penyataan khas adalah seperti untuk menyuarakan rakus apabila sesuatu yang salah berlaku. Ini adalah bagaimana anda boleh melakukannya:

def check_value(value):
max_value = 100
if value > max_value:
raise ValueTooLargeError("Value is too large!", value)
print(f"Value {value} is acceptable.")

# Let's try it out
try:
check_value(150)
except ValueTooLargeError as error:
print(f"Oops! {error.message} The value was {error.value}")

Dalam contoh ini, kita sedang untuk memeriksa jika nilai adalah terlalu besar. Jika ya, kita melepaskan penyataan khas kita ValueTooLargeError dengan mesej ubahan dan nilai sebenar.

Mengurus Penyataan Khas Buatan Pengguna

Mengurus penyataan khas buatan pengguna adalah seperti mengurus penyataan khas bawaan. Kita menggunakan blok try-except yang dipercayai. Mari kita kembangkan atas contoh sebelumnya:

def process_value(value):
try:
check_value(value)
except ValueTooLargeError as error:
print(f"Error: {error.message} The value {error.value} is not allowed.")
# Di sini anda boleh menambah kod untuk menguruskan ralat, seperti untuk meminta nilai baru
else:
print("Value processed successfully!")
finally:
print("Value checking complete.")

# Let's try it with different values
process_value(50)
process_value(200)

Dalam kod ini, kita menggunakan blok try-except untuk menguruskan penyataan khas kita ValueTooLargeError. Kita juga telah menambah klausa else yang dijalankan jika tidak ada penyataan khas yang diangkat, dan klausa finally yang selalu dijalankan, tidak kira apakah penyataan khas berlaku atau tidak.

Contoh Lengkap

Sekarang, mari kita gabungkan semuanya dalam contoh yang lebih kompleks. Bayangkan kita sedang untuk membuat sistem perbankan yang simple:

class InsufficientFundsError(Exception):
def __init__(self, balance, amount):
self.balance = balance
self.amount = amount
self.message = f"Insufficient funds. Balance: ${balance}, Attempted withdrawal: ${amount}"

class NegativeAmountError(Exception):
def __init__(self, amount):
self.amount = amount
self.message = f"Cannot process negative amount: ${amount}"

class BankAccount:
def __init__(self, balance=0):
self.balance = balance

def deposit(self, amount):
if amount < 0:
raise NegativeAmountError(amount)
self.balance += amount
print(f"Deposited ${amount}. New balance: ${self.balance}")

def withdraw(self, amount):
if amount < 0:
raise NegativeAmountError(amount)
if amount > self.balance:
raise InsufficientFundsError(self.balance, amount)
self.balance -= amount
print(f"Withdrew ${amount}. New balance: ${self.balance}")

# Let's use our BankAccount class
account = BankAccount(100)

try:
account.deposit(50)
account.withdraw(30)
account.withdraw(200)  # This should raise an InsufficientFundsError
except NegativeAmountError as error:
print(f"Error: {error.message}")
except InsufficientFundsError as error:
print(f"Error: {error.message}")
else:
print("All transactions completed successfully.")
finally:
print(f"Final balance: ${account.balance}")

Dalam contoh ini, kita telah membuat kelas BankAccount dengan method deposit dan withdraw. Kita juga telah definisikan dua penyataan khas ubahan: InsufficientFundsError dan NegativeAmountError.

Apabila kita cuba untuk menarik lebih banyak wang daripada yang kita ada di atas akaun, itu mengangkat penyataan khas InsufficientFundsError. Jika kita cuba untuk mendeposit atau menarik jumlah negatif, itu mengangkat penyataan khas NegativeAmountError.

Ini adalah contoh yang bagus tentang bagaimana penyataan khas buatan pengguna boleh membuat kod kita lebih mudah dibaca dan membantu kita menguruskan kesesuaian ralat yang spesifik dalam cara yang jelas dan teratur.

Penutup

Congratulations! Anda baru saja meningkatkan keterampilan Python anda dengan belajar tentang penyataan khas buatan pengguna. Penyataan khas ini adalah seperti pasukan pribadi anda untuk penyelamat ralat, siap untuk bertindak apabila sesuatu yang tidak dijangka berlaku di atas kod anda.

Ingat, kunci untuk menguasai penyataan khas buatan pengguna adalah latihan. Cuba untuk membuat penyataan khas anda sendiri untuk beberapa senario yang berbeza, dan tidak lama lagi anda akan menguruskan ralat seperti profesional!

Di bawah adalah rakaman rujukan cepat bagi method yang kita telah pokokkan:

Method Description
class CustomError(Exception): Mencipta kelas penyataan khas baru
raise CustomError() Mengangkat penyataan khas ubahan
try: Memulakan blok percubaan
except CustomError as error: Mengesan penyataan khas spesifik ubahan
else: Berjalan jika tidak ada penyataan khas yang diangkat
finally: Selalu dijalankan, tak kira penyataan khas

Happy coding, and may your exceptions always be caught!


以下是马来语(Ms)的翻译:

Python - Penyataan Khas Buatan Pengguna

Hai di sana, ahli penyihir Python masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke atas dunia penyataan khas buatan pengguna di Python. Jangan khawatir jika anda baru dalam pemrograman; saya akan pandu anda melalui pengalaman ini langkah demi langkah, sama seperti yang saya lakukan untuk pelbagai pelajar selama tahun tahun pengajaran saya. Jadi, ambil rakus maya anda (papan kekunci), dan mari kita melompat masuk!

Penyataan Khas Buatan Pengguna di Python

Sebelum kita mula untuk membuat penyataan khas kita sendiri, mari kita secara cepat mengingatkan diri tentang penyataan khas. Bayangkan anda sedang untuk memasakkan makanan yang sedap, tetapi tiba-tiba anda menyadari anda kehabisan bahan penting. Itu adalah seperti penyataan khas dalam pemrograman – itu adalah situasi yang tidak dijangka yang mengganggu aliran normal kod anda.

Python datang dengan banyak penyataan khas bawaan, seperti ValueError, TypeError, dan ZeroDivisionError. Tetapi kadang-kadang, kita perlu untuk membuat penyataan khas kita sendiri untuk menguruskan situasi yang unik di atas program kita. Itu adalah di mana penyataan khas buatan pengguna menjadi berguna!

Cara untuk Membuat Penyataan Khas Buatan Pengguna

Membuat penyataan khas anda sendiri adalah sama mudah seperti untuk membaking kue (baiklah, resepi kue yang mudah). Semua yang anda perlu lakukan adalah untuk membuat kelas baru yang mewarisi dari kelas bawaan Exception atau mana-mana anak kelasnya. Mari lihat contoh yang simple:

class MySpecialError(Exception):
pass

Itu saja! Anda baru saja membuat penyataan khas buatan pengguna pertama anda. Perintah pass digunakan kerana kita tidak perlu untuk menambahkan fungsi tambahan kepada kelas penyataan khas kita.

Tetapi apa jika kita ingin penyataan khas kita untuk menjadi sedikit lebih informatif? Mari kita buat lagi satu:

class ValueTooLargeError(Exception):
def __init__(self, message, value):
self.message = message
self.value = value

Dalam contoh ini, kita telah menambahkan method __init__ kepada kelas penyataan khas kita. Ini membolehkan kita untuk memassing maklumat tambahan apabila kita melepaskan penyataan khas.

Mengangkat Penyataan Khas Buatan Pengguna

Sekarang bahwa kita ada penyataan khas kita sendiri, mari kita lihat bagaimana kita boleh menggunakannya di atas kod kita. Mengangkat penyataan khas adalah seperti untuk menyuarakan rakus apabila sesuatu yang salah berlaku. Ini adalah bagaimana anda boleh melakukannya:

def check_value(value):
max_value = 100
if value > max_value:
raise ValueTooLargeError("Value is too large!", value)
print(f"Value {value} is acceptable.")

# Let's try it out
try:
check_value(150)
except ValueTooLargeError as error:
print(f"Oops! {error.message} The value was {error.value}")

Dalam contoh ini, kita sedang untuk memeriksa jika nilai adalah terlalu besar. Jika ya, kita melepaskan penyataan khas kita ValueTooLargeError dengan mesej ubahan dan nilai sebenar.

Mengurus Penyataan Khas Buatan Pengguna

Mengurus penyataan khas buatan pengguna adalah seperti mengurus penyataan khas bawaan. Kita menggunakan blok try-except yang dipercayai. Mari kita kembangkan atas contoh sebelumnya:

def process_value(value):
try:
check_value(value)
except ValueTooLargeError as error:
print(f"Error: {error.message} The value {error.value} is not allowed.")
# Di sini anda boleh menambah kod untuk menguruskan ralat, seperti untuk meminta nilai baru
else:
print("Value processed successfully!")
finally:
print("Value checking complete.")

# Let's try it with different values
process_value(50)
process_value(200)

Dalam kod ini, kita menggunakan blok try-except untuk menguruskan penyataan khas kita ValueTooLargeError. Kita juga telah menambah klausa else yang dijalankan jika tidak ada penyataan khas yang diangkat, dan klausa finally yang selalu dijalankan, tak kira apakah penyataan khas berlaku atau tidak.

Contoh Lengkap

Sekarang, mari kita gabungkan semuanya dalam contoh yang lebih kompleks. Bayangkan kita sedang untuk membuat sistem perbankan yang simple:

class InsufficientFundsError(Exception):
def __init__(self, balance, amount):
self.balance = balance
self.amount = amount
self.message = f"Insufficient funds. Balance: ${balance}, Attempted withdrawal: ${amount}"

class NegativeAmountError(Exception):
def __init__(self, amount):
self.amount = amount
self.message = f"Cannot process negative amount: ${amount}"

class BankAccount:
def __init__(self, balance=0):
self.balance = balance

def deposit(self, amount):
if amount < 0:
raise NegativeAmountError(amount)
self.balance += amount
print(f"Deposited ${amount}. New balance: ${self.balance}")

def withdraw(self, amount):
if amount < 0:
raise NegativeAmountError(amount)
if amount > self.balance:
raise InsufficientFundsError(self.balance, amount)
self.balance -= amount
print(f"Withdrew ${amount}. New balance: ${self.balance}")

# Let's use our BankAccount class
account = BankAccount(100)

try:
account.deposit(50)
account.withdraw(30)
account.withdraw(200)  # This should raise an InsufficientFundsError
except NegativeAmountError as error:
print(f"Error: {error.message}")
except InsufficientFundsError as error:
print(f"Error: {error.message}")
else:
print("All transactions completed successfully.")
finally:
print(f"Final balance: ${account.balance}")

Dalam contoh ini, kita telah membuat kelas BankAccount dengan method deposit dan withdraw. Kita juga telah definisikan dua penyataan khas ubahan: InsufficientFundsError dan NegativeAmountError.

Apabila kita cuba untuk menarik lebih banyak wang daripada yang kita ada di atas akaun, itu mengangkat penyataan khas InsufficientFundsError. Jika kita cuba untuk mendeposit atau menarik jumlah negatif, itu mengangkat penyataan khas NegativeAmountError.

Ini adalah contoh yang bagus tentang bagaimana penyataan khas buatan pengguna boleh membuat kod kita lebih mudah dibaca dan membantu kita menguruskan kesesuaian ralat yang spesifik dalam cara yang jelas dan teratur.

Penutup

Tahniah! Anda baru saja meningkatkan keterampilan Python anda dengan belajar tentang penyataan khas buatan pengguna. Penyataan khas ini adalah seperti pasukan pribadi anda untuk penyelamat ralat, siap untuk bertindak apabila sesuatu yang tidak dijangka berlaku di atas kod anda.

Ingat, kunci untuk menguasai penyataan khas buatan pengguna adalah latihan. Cuba untuk membuat penyataan khas anda sendiri untuk beberapa senario yang berbeza, dan tidak lama lagi anda akan menguruskan ralat seperti profesional!

Di bawah adalah rakaman rujukan cepat bagi method yang kita telah pokokkan:

Method Description
class CustomError(Exception): Mencipta kelas penyataan khas baru
raise CustomError() Mengangkat penyataan khas ubahan
try: Memulakan blok percubaan
except CustomError as error: Mengesan penyataan khas spesifik ubahan
else: Berjalan jika tidak ada penyataan khas yang diangkat
finally: Selalu dijalankan, tak kira penyataan khas

Happy coding, and may your exceptions always be caught!

Credits: Image by storyset