Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Verwendung von Assertions | Fehlerbehandlung
Python Fortgeschrittene Konzepte

book
Verwendung von Assertions

In Python ist die assert-Anweisung eine eingebaute Funktion, die dazu dient, zu überprüfen, ob bestimmte Bedingungen in Ihrem Code wahr sind. Sie dient als Plausibilitätsprüfung und bestätigt, dass bestimmte Voraussetzungen zu bestimmten Zeitpunkten während der Programmausführung erfüllt sind.

Die Syntax für die assert-Anweisung ist wie folgt:

python
assert condition, message

In Python werden Assertions durch die assert-Anweisung durchgeführt. Eine Assertion überprüft eine Bedingung, und wenn die Bedingung zu False ausgewertet wird, löst sie eine AssertionError-Ausnahme mit einer optionalen Fehlermeldung aus.

def calculate_average(grades):
assert len(grades) > 0, "List of grades cannot be empty"
return sum(grades) / len(grades)

calculate_average([]) # Throw an error
12345
def calculate_average(grades): assert len(grades) > 0, "List of grades cannot be empty" return sum(grades) / len(grades) calculate_average([]) # Throw an error
copy

In diesem Beispiel berechnet die Funktion die Durchschnittsnote, und die Assertion stellt sicher, dass die Liste der Noten nicht leer ist, bevor der Durchschnitt berechnet wird. Wenn die Noten leer sind, schlägt die Assertion fehl, was eine Division durch Null verhindert und auf einen klaren Fehler in der Programmlogik hinweist.

Hier sind einige häufig verwendete Kategorien von Assertions:

  • Wert-Assertions: Diese Assertions werden häufig in Debugging- und Test-Szenarien eingesetzt, um zu überprüfen, ob die im Programm verwendeten Werte den erwarteten Kriterien entsprechen. Zum Beispiel könnten Sie Assertions wie assert x >= 18 oder wie zuvor gezeigt, assert len(grades) > 0 verwenden;

  • Typ-Assertions: Typ-Assertions sind besonders wertvoll in dynamisch typisierten Sprachen wie Python, wo sich der Typ einer Variablen ändern kann. Zum Beispiel bestätigt isinstance(x, int), dass x tatsächlich ein Integer ist;

  • Sammlungs-Assertions: Diese Assertions werden verwendet, um zu überprüfen, ob eine Sammlung (wie eine Liste oder ein Wörterbuch) bestimmte Elemente enthält oder bestimmte Kriterien erfüllt. Beispiele sind assert item in my_list oder assert key in my_dict;

  • Ausnahme-Assertions: Diese werden hauptsächlich im Unit-Testing verwendet (was wir im letzten Abschnitt lernen werden), um sicherzustellen, dass der Code Ausnahmen korrekt behandelt. Zum Beispiel überprüft assert_raises(ValueError, int, 'abc'), dass das Konvertieren von 'abc' in einen Integer einen ValueError auslöst. Ebenso verifiziert assert_raises(ExceptionType, my_function, arg1, arg2), dass der Aufruf von my_function mit arg1 und arg2 eine Ausnahme vom Typ ExceptionType auslöst.

Nun, lassen Sie uns Assertions in ein bestehendes Projekt implementieren, um zu überprüfen, ob bestimmte Bedingungen während der Programmausführung erfüllt sind.

Aufgabe

Swipe to start coding

Fügen Sie einem Beispielprojekt, das Benutzerdaten verwaltet, Assertions hinzu, um sicherzustellen, dass die Benutzerinformationen bestimmten Kriterien entsprechen.

  1. Überprüfen Sie, dass die user_id nicht bereits im users Wörterbuch vorhanden ist, um Duplikate zu vermeiden;
  2. Stellen Sie sicher, dass user_id ein Integer ist, um Konsistenz in den Benutzer-ID-Typen zu gewährleisten;
  3. Bestätigen Sie, dass user_info als Wörterbuch übergeben wird, um Datentypfehler zu vermeiden.

Lösung

# Existing function to add user details
def add_user(users, user_id, user_info):
assert user_id not in users, "User ID already exists"
assert isinstance(user_id, int), "User ID must be an integer"
assert isinstance(user_info, dict), "User info must be a dictionary"

users[user_id] = user_info
print(f"Added user {user_id}")

# Test the function
users = {}
add_user(users, 1, {"name": "John", "age": 28})
add_user(users, 2, {"name": "Jane", "age": 32})
# The following will raise an assertion error
add_user(users, 1, {"name": "Alice", "age": 24}) # Duplicate user ID

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 4
# Existing function to add user details
def add_user(users, user_id, user_info):
___ user_id not ___ users, "User ID already exists"
___ isinstance(user_id, int), "User ID must be an integer"
___ ___(user_info, dict), "User info must be a dictionary"

users[user_id] = user_info
print(f"Added user {user_id}")

# Test the function
users = {}
add_user(users, 1, {"name": "John", "age": 28})
add_user(users, 2, {"name": "Jane", "age": 32})
# The following will raise an assertion error
add_user(users, 1, {"name": "Alice", "age": 24}) # Duplicate user ID
toggle bottom row
some-alt