Att Utlösa Undantag i Python: Utlösning och Hantering av Fel
Undantag i Python bör höjas för att signalera att ett fel har inträffat, vilket gör det omöjligt för en funktion eller metod att utföra sin avsedda uppgift. Detta är särskilt användbart i situationer där det kan vara tvetydigt att bara returnera ett None eller ett liknande värde och det kanske inte tillräckligt tydligt visar att ett fel har inträffat.
Höja ett standardundantag
För att höja ett undantag i Python används satsen raise. Här är ett enkelt exempel:
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 detta exempel höjs ett ValueError om birth_year är större än det aktuella året, vilket indikerar att det angivna födelseåret är ogiltigt.
Skapa egna undantag
Även om Pythons inbyggda undantag täcker många olika scenarier kan det ibland vara nödvändigt att definiera egna undantag för att tydligt uttrycka ett fel som är specifikt för ditt område.
Definiera egna undantag
Egna undantag härleds vanligtvis från den inbyggda klassen Exception eller någon av dess underklasser. Så här kan du definiera ett eget undantag:
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
Observera
Hoppas du minns arvskonceptet från OOP 😉
Här är ett praktiskt exempel på hur egna undantag används. Oroa dig inte för nyckelorden else och as i exemplet; vi kommer att gå igenom dem i nästa 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
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 3.13
Att Utlösa Undantag i Python: Utlösning och Hantering av Fel
Svep för att visa menyn
Undantag i Python bör höjas för att signalera att ett fel har inträffat, vilket gör det omöjligt för en funktion eller metod att utföra sin avsedda uppgift. Detta är särskilt användbart i situationer där det kan vara tvetydigt att bara returnera ett None eller ett liknande värde och det kanske inte tillräckligt tydligt visar att ett fel har inträffat.
Höja ett standardundantag
För att höja ett undantag i Python används satsen raise. Här är ett enkelt exempel:
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 detta exempel höjs ett ValueError om birth_year är större än det aktuella året, vilket indikerar att det angivna födelseåret är ogiltigt.
Skapa egna undantag
Även om Pythons inbyggda undantag täcker många olika scenarier kan det ibland vara nödvändigt att definiera egna undantag för att tydligt uttrycka ett fel som är specifikt för ditt område.
Definiera egna undantag
Egna undantag härleds vanligtvis från den inbyggda klassen Exception eller någon av dess underklasser. Så här kan du definiera ett eget undantag:
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
Observera
Hoppas du minns arvskonceptet från OOP 😉
Här är ett praktiskt exempel på hur egna undantag används. Oroa dig inte för nyckelorden else och as i exemplet; vi kommer att gå igenom dem i nästa 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
Tack för dina kommentarer!