Udløsning af Undtagelser i Python: Udløsning og Håndtering af Fejl
Undtagelser i Python bør udløses for at signalere, at en fejlsituation er opstået, hvilket gør det umuligt for en funktion eller metode at udføre sin tilsigtede opgave. Dette er især nyttigt i situationer, hvor det blot at returnere en None eller en lignende værdi kan være tvetydigt og muligvis ikke tilstrækkeligt angiver, at der er opstået en fejl.
Udløsning af en standardundtagelse
For at udløse en undtagelse i Python bruges raise-sætningen. Her er et simpelt 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 eksempel udløses en ValueError, hvis birth_year er større end det nuværende år, hvilket indikerer, at det angivne fødselsår er ugyldigt.
Oprettelse af brugerdefinerede undtagelser
Selvom Pythons indbyggede undtagelser dækker mange forskellige scenarier, kan det nogle gange være nødvendigt at definere egne undtagelser for tydeligt at udtrykke en fejlsituation, der er specifik for dit domæne.
Definition af brugerdefinerede undtagelser
Brugerdefinerede undtagelser nedarves typisk fra den indbyggede Exception-klasse eller en af dens underklasser. Sådan kan du definere en brugerdefineret undtagelse:
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
Bemærk
Forhåbentlig husker du arvebegrebet fra OOP 😉
Her er et praktisk eksempel på, hvordan brugerdefinerede undtagelser anvendes. Vær ikke bekymret for else og as nøgleordene i eksemplet; dem gennemgår vi i næste kapitel.
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
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Fantastisk!
Completion rate forbedret til 3.13
Udløsning af Undtagelser i Python: Udløsning og Håndtering af Fejl
Stryg for at vise menuen
Undtagelser i Python bør udløses for at signalere, at en fejlsituation er opstået, hvilket gør det umuligt for en funktion eller metode at udføre sin tilsigtede opgave. Dette er især nyttigt i situationer, hvor det blot at returnere en None eller en lignende værdi kan være tvetydigt og muligvis ikke tilstrækkeligt angiver, at der er opstået en fejl.
Udløsning af en standardundtagelse
For at udløse en undtagelse i Python bruges raise-sætningen. Her er et simpelt 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 eksempel udløses en ValueError, hvis birth_year er større end det nuværende år, hvilket indikerer, at det angivne fødselsår er ugyldigt.
Oprettelse af brugerdefinerede undtagelser
Selvom Pythons indbyggede undtagelser dækker mange forskellige scenarier, kan det nogle gange være nødvendigt at definere egne undtagelser for tydeligt at udtrykke en fejlsituation, der er specifik for dit domæne.
Definition af brugerdefinerede undtagelser
Brugerdefinerede undtagelser nedarves typisk fra den indbyggede Exception-klasse eller en af dens underklasser. Sådan kan du definere en brugerdefineret undtagelse:
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
Bemærk
Forhåbentlig husker du arvebegrebet fra OOP 😉
Her er et praktisk eksempel på, hvordan brugerdefinerede undtagelser anvendes. Vær ikke bekymret for else og as nøgleordene i eksemplet; dem gennemgår vi i næste kapitel.
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
Tak for dine kommentarer!