Python Academy · Pelajaran

Kelas Pengecualian Tersuai

Takrifkan jenis pengecualian sendiri untuk menyampaikan ralat dengan lebih jelas.

Pelajaran 4 daripada 414 langkah

Kelas Pengecualian Tersuai ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

Pengenalan

Kelas pengecualian tersuai menjadikan pengendalian ralat Anda jelas, menerangkan dirinya sendiri dan mudah dikendalikan dengan tepat oleh pemanggil.

Mengapa Pengecualian Tersuai?

Pengecualian terbina dalam terlalu umum. Pengecualian tersuai membolehkan pemanggil menangkap hanya ralat pustaka YOUR tanpa menangkap ralat lain yang tidak berkaitan.
class AppError(Exception):
    pass
raise AppError('something went wrong')

Mewarisi daripada Exception

class MyError(Exception): pass sahaja sudah memadai. Sentiasa warisi daripada Exception, bukan BaseException.
class ValidationError(Exception):
    pass
try:
    raise ValidationError('email is invalid')
except ValidationError as e:
    print(e)

Menambah Atribut Tersuai

class APIError(Exception): def __init__(self, status, message): self.status = status; super().__init__(message)
class APIError(Exception):
    def __init__(self, status, message):
        self.status = status
        super().__init__(message)
try:
    raise APIError(404, 'Not found')
except APIError as e:
    print(e.status, e)

Hierarki Pengecualian

Bina hierarki: class DBError(AppError): pass — pemanggil boleh menangkap AppError untuk sebarang ralat aplikasi, atau DBError secara khusus.
class AppError(Exception): pass
class DBError(AppError): pass
class NetworkError(AppError): pass
try:
    raise DBError('timeout')
except AppError as e:
    print('app error:', e)

Kaedah __str__ Tersuai

Gantikan __str__ untuk mengawal rupa mesej pengecualian apabila dicetak.
class RangeError(ValueError):
    def __init__(self, val, lo, hi):
        self.val, self.lo, self.hi = val, lo, hi
    def __str__(self):
        return f'{self.val} not in [{self.lo}, {self.hi}]'
print(RangeError(15, 0, 10))

Menaikkan Pengecualian Tersuai

Gunakan raise dalam fungsi Anda untuk menandakan ralat khusus domain. Ini menghasilkan API yang kemas untuk pemanggil.
class InsufficientFundsError(Exception):
    def __init__(self, needed, available):
        super().__init__(f'Need {needed}, have {available}')
def withdraw(balance, amount):
    if amount > balance:
        raise InsufficientFundsError(amount, balance)
    return balance - amount
try:
    withdraw(100, 200)
except InsufficientFundsError as e:
    print(e)

Menangkap Mengikut Kelas Asas

except AppError menangkap semua subkelas: DBError, NetworkError dan sebagainya. Hierarki membolehkan pemanggil memilih tahap kekhususan.
class AppError(Exception): pass
class DBError(AppError): pass
try:
    raise DBError('conn failed')
except AppError:
    print('any app error')

Pengecualian dengan Pengurus Konteks

Pengecualian tersuai bersepadu dengan pengurus konteks: class suppressed: __exit__ mengembalikan True untuk menyekat pengecualian.
class SuppressValue(Exception): pass
try:
    raise SuppressValue('ignored')
except SuppressValue:
    pass  # suppress silently
print('continued')

Mendokumentasikan Pengecualian Tersuai

Dokumentasikan WHEN untuk menaikkan pengecualian dan WHAT yang dimaksudkan oleh atribut tersebut. Rentetan dokumentasi yang baik menjadikan pengecualian tersuai mudah digunakan.
class ConfigError(Exception):
    """Raised when configuration is invalid.
    Attributes:
        key: The invalid config key
    """
    def __init__(self, key, msg):
        super().__init__(msg)
        self.key = key

Amalan Terbaik

Pastikan hierarki cetek (2–3 tahap). Sentiasa warisi daripada Exception. Gunakan nama deskriptif yang berakhir dengan Error. Letakkan dalam modul exceptions.py khusus.
# Good structure:
class AppError(Exception): pass
class ValidationError(AppError): pass
class NotFoundError(AppError): pass
print('hierarchy demo')

Semakan Pantas

Pengecualian tersuai patut mewarisi daripada apa untuk mengelakkan penangkapan peristiwa yang menghentikan sistem?

Imbas Kembali

Pengecualian tersuai: warisi daripada Exception, tambah atribut dalam __init__, dan gantikan __str__. Bina hierarki untuk kebolehtangkapan. Letakkan dalam modul exceptions.py.

Teruskan

Syabas! Teruskan ke pelajaran seterusnya untuk meneruskan kemajuan Anda.
Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
76
Pelajaran
320

Soalan Lazim

Adakah pelajaran “Kelas Pengecualian Tersuai” percuma?

Ya — teks penuh “Kelas Pengecualian Tersuai” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kelas Pengecualian Tersuai”?

Takrifkan jenis pengecualian sendiri untuk menyampaikan ralat dengan lebih jelas. Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Python Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Kelas Pengecualian Tersuai” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Memahami Pengecualian
  2. try / except / else / finally
  3. Mencetuskan dan Mencetuskan Semula Pengecualian
  4. Kelas Pengecualian Tersuai
← Kembali ke Python Academy