Python Academy · leksjon

Egendefinerte unntaksklasser

Definer dine egne unntakstyper for tydeligere kommunikasjon av feil.

Leksjon 4 av 414 trinn

Egendefinerte unntaksklasser er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Introduksjon

Egendefinerte unntaksklasser gjør feilhåndteringen tydelig, selvforklarende og enkel for kallere å håndtere presist.

Hvorfor egendefinerte unntak?

Innebygde unntak er for generelle. Egendefinerte unntak lar kallere fange bare feil fra DERES bibliotek uten å fange urelaterte feil.
class AppError(Exception):
    pass
raise AppError('something went wrong')

Arve fra Exception

class MyError(Exception): pass er alt De trenger. Arv alltid fra Exception, ikke BaseException.
class ValidationError(Exception):
    pass
try:
    raise ValidationError('email is invalid')
except ValidationError as e:
    print(e)

Legge til egendefinerte attributter

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)

Unntakshierarkiet

Bygg et hierarki: class DBError(AppError): pass – kallere kan fange AppError for alle programfeil eller DBError spesifikt.
class AppError(Exception): pass
class DBError(AppError): pass
class NetworkError(AppError): pass
try:
    raise DBError('timeout')
except AppError as e:
    print('app error:', e)

Egendefinert __str__-metode

Overstyr __str__ for å kontrollere hvordan unntaksmeldingen ser ut når den skrives ut.
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))

Utløse egendefinerte unntak

Bruk raise i funksjonene Deres for å signalisere domenespesifikke feil. Dette gir et ryddig API for kallere.
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)

Fange etter basisklasse

except AppError fanger alle underklasser: DBError, NetworkError og så videre. Hierarkiet lar kallere velge ønsket spesifisitet.
class AppError(Exception): pass
class DBError(AppError): pass
try:
    raise DBError('conn failed')
except AppError:
    print('any app error')

Unntak med kontekstbehandler

Egendefinerte unntak integreres med kontekstbehandlere: class suppressed: __exit__ returnerer True for å undertrykke unntaket.
class SuppressValue(Exception): pass
try:
    raise SuppressValue('ignored')
except SuppressValue:
    pass  # suppress silently
print('continued')

Dokumentere egendefinerte unntak

Dokumenter NÅR unntaket skal utløses og HVA attributtene betyr. Gode docstrings gjør egendefinerte unntak enklere å bruke.
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

Anbefalte fremgangsmåter

Hold hierarkiet grunt (2–3 nivåer). Arv alltid fra Exception. Bruk beskrivende navn som slutter på Error. Plasser dem i en egen exceptions.py-modul.
# Good structure:
class AppError(Exception): pass
class ValidationError(AppError): pass
class NotFoundError(AppError): pass
print('hierarchy demo')

Hurtigsjekk

Hva bør egendefinerte unntak arve fra for å unngå å fange hendelser som avslutter systemet?

Oppsummering

Egendefinerte unntak: arv fra Exception, legg til attributter i __init__, og overstyr __str__. Bygg hierarkier for å gjøre dem enkle å fange. Plasser dem i exceptions.py-modulen.

Fortsett

Godt jobbet! Gå videre til neste leksjon for å fortsette fremgangen.
Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «Egendefinerte unntaksklasser» gratis?

Ja – hele teksten i «Egendefinerte unntaksklasser» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Egendefinerte unntaksklasser»?

Definer dine egne unntakstyper for tydeligere kommunikasjon av feil. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Egendefinerte unntaksklasser»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Forstå unntak
  2. try / except / else / finally
  3. Utløse og utløse unntak på nytt
  4. Egendefinerte unntaksklasser
← Tilbake til Python Academy