Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Att Utlösa Undantag i Python: Utlösning och Hantering av Fel | Bemästra Felhantering i Python
Quizzes & Challenges
Quizzes
Challenges
/
Python Strukturell Programmering

bookAtt 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:

123456789
def 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)
copy

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:

1234567891011
class 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
copy

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
copy
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

bookAtt 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:

123456789
def 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)
copy

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:

1234567891011
class 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
copy

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
copy
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2
some-alt