Kursinhalt
Python Fortgeschrittene Konzepte
Python Fortgeschrittene Konzepte
Auslösen von Ausnahmen
Dieses Kapitel behandelt, wie und wann Ausnahmen ausgelöst werden sollten und wie Sie benutzerdefinierte Ausnahmen erstellen können, um spezifische Situationen in Ihren Anwendungen eleganter zu handhaben.
Wie und wann Ausnahmen ausgelöst werden
Ausnahmen in Python sollten ausgelöst werden, um anzuzeigen, dass ein Fehlerzustand aufgetreten ist, der es einer Funktion oder Methode unmöglich macht, ihre beabsichtigte Aufgabe auszuführen. Dies ist besonders nützlich in Situationen, in denen das einfache Zurückgeben eines None
oder eines ähnlichen Wertes mehrdeutig sein könnte und möglicherweise nicht ausreichend vermittelt, dass ein Fehler aufgetreten ist.
Eine Standardausnahme auslösen
Um eine Ausnahme in Python auszulösen, verwenden Sie die raise-Anweisung. Hier ist ein einfaches Beispiel:
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)
In diesem Beispiel wird ein ValueError ausgelöst, wenn das birth_year
größer als das aktuelle Jahr ist, was darauf hinweist, dass das angegebene Geburtsjahr ungültig ist.
Erstellen benutzerdefinierter Ausnahmen
Während die eingebauten Ausnahmen von Python viele verschiedene Szenarien abdecken, müssen Sie manchmal Ihre eigenen Ausnahmen definieren, um einen Fehlerzustand auszudrücken, der spezifisch für Ihre Domäne ist.
Benutzerdefinierte Ausnahmen definieren
Benutzerdefinierte Ausnahmen werden typischerweise von der eingebauten Exception-Klasse oder einer ihrer Unterklassen abgeleitet. So können Sie eine benutzerdefinierte Ausnahme definieren:
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
Hoffentlich erinnerst du dich an das Vererbungskonzept aus der OOP 😉
Hier ist ein praktisches Beispiel dafür, wie benutzerdefinierte Ausnahmen verwendet werden. Mach dir keine Sorgen über die else
und as
Schlüsselwörter im Beispiel; wir werden diese im nächsten Kapitel behandeln.
# 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
Danke für Ihr Feedback!