Kaste Unntak i Python: Utløse og Håndtere Feil
Unntak i Python bør reises for å signalisere at en feilsituasjon har oppstått, noe som gjør det umulig for en funksjon eller metode å utføre sin tiltenkte oppgave. Dette er spesielt nyttig i situasjoner der det å returnere None eller en lignende verdi kan være tvetydig og kanskje ikke tilstrekkelig formidler at en feil har oppstått.
Heving av et standard unntak
For å heve et unntak i Python, bruker du raise-setningen. Her er et enkelt eksempel:
123456789def calculate_age(birth_year): import datetime current_year = datetime.datetime.now().year age = current_year - birth_year if age < 0: raise ValueError("The birth year cannot be in the future") return age calculate_age(2034)
I dette eksempelet heves en ValueError hvis birth_year er større enn inneværende år, noe som indikerer at det oppgitte fødselsåret er ugyldig.
Opprette egendefinerte unntak
Selv om Pythons innebygde unntak dekker mange ulike scenarier, kan det noen ganger være nødvendig å definere egne unntak for tydelig å uttrykke en feilsituasjon som er spesifikk for ditt domene.
Definere egendefinerte unntak
Egendefinerte unntak arves vanligvis fra den innebygde Exception-klassen eller en av dens underklasser. Slik kan du definere et egendefinert unntak:
1234567891011class RegistrationError(Exception): """Base class for all registration-related exceptions.""" pass class UsernameTooShort(RegistrationError): """Raised when the username is too short.""" pass class PasswordTooWeak(RegistrationError): """Raised when the password is too weak.""" pass
Merk
Håper du husker arvekonseptet fra OOP 😉
Her er et praktisk eksempel på hvordan egendefinerte unntak brukes. Ikke bekymre deg for else og as-nøkkelordene i eksemplet; vi går gjennom dem i neste kapittel.
123456789101112131415161718192021222324252627282930# Custom exceptions class RegistrationError(Exception): pass class UsernameTooShort(RegistrationError): pass class PasswordTooWeak(RegistrationError): pass # Functions to validate registration def validate_username(username): if len(username) < 6: raise UsernameTooShort("Username must be at least 6 characters long") def validate_password(password): if len(password) < 8: raise PasswordTooWeak("Password must be at least 8 characters long") def register_user(username, password): try: validate_username(username) validate_password(password) except RegistrationError as error: print(f"Registration failed: {error}") else: print("User registered successfully!") # Test the registration function register_user("john", "123") # This should fail
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Can you explain the difference between built-in and custom exceptions in Python?
How do I decide when to create a custom exception?
Can you show more examples of using custom exceptions in real-world scenarios?
Fantastisk!
Completion rate forbedret til 3.13
Kaste Unntak i Python: Utløse og Håndtere Feil
Sveip for å vise menyen
Unntak i Python bør reises for å signalisere at en feilsituasjon har oppstått, noe som gjør det umulig for en funksjon eller metode å utføre sin tiltenkte oppgave. Dette er spesielt nyttig i situasjoner der det å returnere None eller en lignende verdi kan være tvetydig og kanskje ikke tilstrekkelig formidler at en feil har oppstått.
Heving av et standard unntak
For å heve et unntak i Python, bruker du raise-setningen. Her er et enkelt eksempel:
123456789def calculate_age(birth_year): import datetime current_year = datetime.datetime.now().year age = current_year - birth_year if age < 0: raise ValueError("The birth year cannot be in the future") return age calculate_age(2034)
I dette eksempelet heves en ValueError hvis birth_year er større enn inneværende år, noe som indikerer at det oppgitte fødselsåret er ugyldig.
Opprette egendefinerte unntak
Selv om Pythons innebygde unntak dekker mange ulike scenarier, kan det noen ganger være nødvendig å definere egne unntak for tydelig å uttrykke en feilsituasjon som er spesifikk for ditt domene.
Definere egendefinerte unntak
Egendefinerte unntak arves vanligvis fra den innebygde Exception-klassen eller en av dens underklasser. Slik kan du definere et egendefinert unntak:
1234567891011class RegistrationError(Exception): """Base class for all registration-related exceptions.""" pass class UsernameTooShort(RegistrationError): """Raised when the username is too short.""" pass class PasswordTooWeak(RegistrationError): """Raised when the password is too weak.""" pass
Merk
Håper du husker arvekonseptet fra OOP 😉
Her er et praktisk eksempel på hvordan egendefinerte unntak brukes. Ikke bekymre deg for else og as-nøkkelordene i eksemplet; vi går gjennom dem i neste kapittel.
123456789101112131415161718192021222324252627282930# Custom exceptions class RegistrationError(Exception): pass class UsernameTooShort(RegistrationError): pass class PasswordTooWeak(RegistrationError): pass # Functions to validate registration def validate_username(username): if len(username) < 6: raise UsernameTooShort("Username must be at least 6 characters long") def validate_password(password): if len(password) < 8: raise PasswordTooWeak("Password must be at least 8 characters long") def register_user(username, password): try: validate_username(username) validate_password(password) except RegistrationError as error: print(f"Registration failed: {error}") else: print("User registered successfully!") # Test the registration function register_user("john", "123") # This should fail
Takk for tilbakemeldingene dine!