Brukerdefinerte unntak opprettes ved å definere en ny klasse som arver fra Pythons innebygde unntak klasse eller en av dens underklasser. Ved å gjøre dette kan vi lage tilpassede feilmeldinger og håndtere spesifikke feil på en måte som gir mening for applikasjonen vår.
Trinn for å opprette og bruke brukerdefinerte unntak
Følg disse trinnene for å opprette og bruke brukerdefinerte unntak i Python:
- Definer en ny unntaksklasse: Opprett en ny klasse som arver fra Exception eller noen av dens underklasser.
- Hev unntaket: Bruk raise-setningen til å øke det brukerdefinerte unntaket når en bestemt tilstand oppstår.
- Håndter unntaket: Bruk try-except-blokker for å håndtere det brukerdefinerte unntaket.
Eksempel: I dette eksemplet oppretter vi et tilpasset unntak InvalidAgeError for å sikre at aldersverdier faller innenfor et gyldig område (0–120).
for loop i javaPython
# Step 1: Define a custom exception class class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120'): self.age = age self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.age} -> {self.msg}' # Step 2: Use the custom exception in your code def set_age(age): if age < 0 or age > 120: raise InvalidAgeError(age) else: print(f'Age set to: {age}') # Step 3: Handling the custom exception try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e)
Produksjon
150 -> Age must be between 0 and 120
Forklaring:
- InvalidAgeError-klassen arver fra Exception. Den definerer en __varm__ metode for å akseptere alder og budskap.
- __str__-metoden returnerer en lesbar strengrepresentasjon av feilen.
- I set_age() hvis alderen er utenfor det gyldige området (0–120), økes unntaket.
- Prøv-unntatt-blokken fanger opp unntaket og skriver ut feilmeldingen.
Tilpasse unntaksklasser
Når vi lager et tilpasset unntak, underklasser vi Pythons innebygde unntaksklasse (eller en underklasse som ValueError TypeError osv.). Vi kan deretter legge til våre egne attributtmetoder eller tilpasset logikk for å gjøre unntaket vårt mer informativt.
Vi kan også forbedre tilpassede unntak ved å legge til ekstra attributter eller overstyre metoder.
Eksempel: Her forbedrer vi InvalidAgeError ved å legge til en feilkode og tilpasse feilmeldingen.
Pythonclass InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120' error_code=1001): self.age = age self.msg = msg self.error_code = error_code super().__init__(self.msg) def __str__(self): return f'[Error Code {self.error_code}] {self.age} -> {self.msg}' try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e)
Produksjon
[Error Code 1001] 150 -> Age must be between 0 and 120
Forklaring:
instansiering i java
- InvalidAgeError har nå et ekstra attributt error_code.
- __str__-metoden overstyres for å vise både feilkoden og alderen.
- Når set_age(150) utføres, heves unntaket og fanges opp i try-except-blokken.
- Den tilpassede feilmeldingen skrives ut, noe som gjør feilen mer beskrivende.
Bruk av standard unntak som en basisklasse
Noen ganger i stedet for direkte å arve fra Exception kan vi lage et tilpasset unntak ved å underklassifisere et standard unntak som RuntimeError ValueError osv. Dette er nyttig når det tilpassede unntaket ditt skal behandles som en spesifikk type feil.
Eksempel: Dette eksemplet viser hvordan du oppretter et tilpasset unntak NetworkError ved å arve fra RuntimeError som er et standard innebygd unntak.
Python# NetworkError has base RuntimeError and not Exception class NetworkError(RuntimeError): def __init__(self arg): self.args = (arg) # store as tuple try: raise NetworkError('Connection failed') except NetworkError as e: print(e.args)
Produksjon
('Connection failed') Forklaring:
- NetworkError arver fra RuntimeError som er en innebygd unntakstype.
- Når den heves, lagres meldingen i args-attributtet som en tuppel.
- Unntaket fanges opp og dets lagrede argumenter vises.
Real-World Eksempel: Ugyldig e-postfeil
Her er et enkelt eksempel der vi tar opp et tilpasset unntak hvis e-postadressen ikke er gyldig:
Pythonclass InvalidEmailError(Exception): def __init__(self email msg='Invalid email format'): self.email = email self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.email} -> {self.msg}' def set_email(email): if '@' not in email: raise InvalidEmailError(email) print(f'Email set to: {email}') try: set_email('userexample.com') except InvalidEmailError as e: print(e)
Produksjon
userexample.com -> Invalid email format
Forklaring:
- En ny unntaksklasse InvalidEmailError er definert for å validere e-postadresser.
- Hvis den gitte e-posten ikke inneholder '@', oppstår unntaket.
- Prøv-unntatt-blokken fanger opp feilen og skriver ut den formaterte meldingen.
Når skal du bruke brukerdefinerte unntak?
Brukerdefinerte unntak bør vurderes i følgende scenarier:
bellford algoritme
- Representerer spesifikke feil i en applikasjon (f.eks. InvalidAgeError DatabaseConnectionError).
- Gir klarere og mer beskrivende feilmeldinger.
- Håndtere en gruppe relaterte feil separat ved å bruke unntatt.
Ved å bruke brukerdefinerte unntaksprogrammer blir programmer mer lesbare vedlikeholdbare og enklere å feilsøke.