Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:archiv:m320:learningunits:lu03:theorie:lu4-kapitel_2 [2026/08/30 14:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | modul:archiv:m320:learningunits:lu03:theorie:lu4-kapitel_2 [2026/08/30 14:09] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 74.7.243.195 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ===== 90. Python-Exceptions (alt) ===== | ||
| + | |||
| + | ==== Inhalt ==== | ||
| + | |||
| + | * Ausnahmen versus Syntaxfehler | ||
| + | * Der '' | ||
| + | * Die '' | ||
| + | * Aufräumen nach der '' | ||
| + | * Auslösen einer Ausnahme | ||
| + | * Bedingungen sicherstellen | ||
| + | * Zusammenfassung | ||
| + | |||
| + | Ein Python-Programm wird beendet, sobald es auf einen Fehler stösst. In Python kann ein Fehler ein Syntaxfehler oder eine Ausnahme sein. In diesem Artikel erfahren Sie, was eine Ausnahme ist und wie sie sich von einem Syntaxfehler unterscheidet. Danach erfahren Sie, wie Sie Ausnahmen auslösen und Zusicherungen aufstellen. Dann werden Sie mit einer Demonstration des '' | ||
| + | |||
| + | {{modul: | ||
| + | |||
| + | ==== Ausnahmen versus Syntaxfehler ==== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | <code terminal> | ||
| + | >>> | ||
| + | File "< | ||
| + | print( 0 / 0 )) | ||
| + | ^ | ||
| + | SyntaxError: | ||
| + | </ | ||
| + | |||
| + | Der Pfeil zeigt an, wo der Parser auf den **Syntaxfehler** gestossen ist. In diesem Beispiel war eine Klammer zu viel. Entfernen Sie diese und führen Sie Ihren Code erneut aus: | ||
| + | |||
| + | <code terminal> | ||
| + | >>> | ||
| + | Traceback (most recent call last): | ||
| + | File "< | ||
| + | ZeroDivisionError: | ||
| + | </ | ||
| + | |||
| + | Dieses Mal ist ein **Ausnahmefehler** aufgetreten. Dieser Fehlertyp tritt immer dann auf, wenn syntaktisch korrekter Python-Code zu einem Fehler führt. Die letzte Zeile der Meldung gibt an, auf welche Art von Ausnahmefehler Sie gestossen sind. | ||
| + | |||
| + | Anders als beim Syntaxfehler gibt Python an, welche Art von Ausnahmefehler aufgetreten ist. In diesem Fall war es ein '' | ||
| + | |||
| + | ==== Der try...except Block: Umgang mit Ausnahmen ==== | ||
| + | |||
| + | Der '' | ||
| + | |||
| + | {{modul: | ||
| + | |||
| + | Wie Sie bereits gesehen haben, gibt Python einen Ausnahmefehler aus, wenn syntaktisch korrekter Code auf einen Fehler stösst. Dieser Ausnahmefehler führt zum Absturz des Programms, wenn er nicht behandelt wird. Die '' | ||
| + | |||
| + | Die folgende Funktion kann Ihnen helfen, den '' | ||
| + | |||
| + | <code python> | ||
| + | def process_orders(quantity: | ||
| + | if quantity < 100: | ||
| + | # hier wird ein Fehler erkannt und das passende Fehlerobjekt - im Beispiel ProcessingError - erzeugt | ||
| + | raise ProcessingError(" | ||
| + | else: | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | Die Funktion '' | ||
| + | |||
| + | Mit '' | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | process_orders(99) | ||
| + | except: | ||
| + | pass | ||
| + | </ | ||
| + | |||
| + | Der Fehler wird hier mit '' | ||
| + | |||
| + | <code terminal> | ||
| + | |||
| + | </ | ||
| + | |||
| + | Nichts. Das Gute dabei ist, dass das Programm nicht abgestürzt ist. Aber es wäre schön zu sehen, ob bei der Ausführung Ihres Codes eine Ausnahme aufgetreten ist. Zu diesem Zweck können Sie '' | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | process_orders(99) | ||
| + | except: | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | Führen Sie diesen Code aus: | ||
| + | |||
| + | <code terminal> | ||
| + | Function was not executed | ||
| + | </ | ||
| + | |||
| + | Wenn in einem Programm, das diese Funktion ausführt, eine Ausnahme auftritt, wird das Programm fortfahren und Sie darüber informieren, | ||
| + | |||
| + | Was Sie nicht gesehen haben, war die Art des Fehlers, der als Ergebnis des Funktionsaufrufs ausgelöst wurde. Um genau zu sehen, was schief gelaufen ist, müssten Sie den Fehler abfangen, den die Funktion ausgelöst hat. | ||
| + | |||
| + | Der folgende Code ist ein Beispiel, in dem Sie die Nachricht aus dem '' | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | process_orders(99) | ||
| + | except ProcessingError as error: | ||
| + | print(error) | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | Folgendes wird ausgegeben: | ||
| + | |||
| + | <code terminal> | ||
| + | Not enough orders to start processing. | ||
| + | Function was not executed | ||
| + | </ | ||
| + | |||
| + | Die erste Meldung ist der '' | ||
| + | |||
| + | Im vorherigen Beispiel haben Sie eine selbst geschriebene Funktion aufgerufen. Als Sie die Funktion ausgeführt haben, haben Sie die '' | ||
| + | |||
| + | Hier ist ein weiteres Beispiel, in dem Sie eine Datei öffnen und dabei auf Exceptions prüfen: | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | with open(' | ||
| + | read_data = file.read() | ||
| + | except: | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | Wenn // | ||
| + | |||
| + | <code terminal> | ||
| + | Could not open file.log | ||
| + | </ | ||
| + | |||
| + | Dies ist eine informative Nachricht, und unser Programm wird weiterhin ausgeführt. In der [[https:// | ||
| + | |||
| + | > Ausnahme '' | ||
| + | > | ||
| + | > Wird ausgelöst, wenn eine Datei oder ein Verzeichnis angefordert wird, aber nicht vorhanden ist. Entspricht '' | ||
| + | |||
| + | Um diese Art von Ausnahme abzufangen und auf dem Bildschirm auszugeben, können Sie den folgenden Code verwenden: | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | with open(' | ||
| + | read_data = file.read() | ||
| + | except FileNotFoundError as fnf_error: | ||
| + | print(fnf_error) | ||
| + | </ | ||
| + | |||
| + | Wenn in diesem Fall // | ||
| + | |||
| + | <code terminal> | ||
| + | [Errno 2] No such file or directory: ' | ||
| + | </ | ||
| + | |||
| + | Sie können mehr als einen Funktionsaufruf in Ihrer '' | ||
| + | |||
| + | <WRAP important 100%> | ||
| + | **Warnung: | ||
| + | </ | ||
| + | |||
| + | Hier sind die wichtigsten Erkenntnisse: | ||
| + | |||
| + | * Eine '' | ||
| + | * Innerhalb der '' | ||
| + | * Dabei können Sie verschiedene Ausnahmen prüfen und jeweils anders darauf reagieren, so wie es erforderlich ist. | ||
| + | * Verwenden Sie keine leeren '' | ||
| + | |||
| + | ==== Die else Klausel ==== | ||
| + | |||
| + | In Python können Sie mit der '' | ||
| + | |||
| + | {{modul: | ||
| + | |||
| + | Sehen Sie sich das folgende Beispiel an: | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | process_orders() | ||
| + | except ProcessingError as error: | ||
| + | print(error) | ||
| + | else: | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | Wenn Sie diesen Code ausführen und kein Fehler auftritt, würde die Ausgabe wie folgt aussehen: | ||
| + | |||
| + | <code terminal> | ||
| + | Doing something. Executing the else clause. | ||
| + | </ | ||
| + | |||
| + | Da das Programm auf keine Ausnahmen gestossen ist, wurde die '' | ||
| + | |||
| + | Sie können auch '' | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | process_orders() | ||
| + | except ProcessingError as error: | ||
| + | print(error) | ||
| + | else: | ||
| + | try: | ||
| + | with open(' | ||
| + | read_data = file.read() | ||
| + | except FileNotFoundError as fnf_error: | ||
| + | print(fnf_error) | ||
| + | </ | ||
| + | |||
| + | Wenn die Datei nicht gelesen werden kann, würden Sie das folgende Ergebnis erhalten: | ||
| + | |||
| + | <code terminal> | ||
| + | Doing something. | ||
| + | [Errno 2] No such file or directory: ' | ||
| + | </ | ||
| + | |||
| + | Aus der Ausgabe können Sie sehen, dass die '' | ||
| + | |||
| + | ==== Aufräumen nach der finally Verwendung ==== | ||
| + | |||
| + | Stellen Sie sich vor, Sie müssten nach der Ausführung Ihres Codes immer eine Aktion zum Aufräumen implementieren. Python ermöglicht Ihnen dies mit der '' | ||
| + | |||
| + | {{modul: | ||
| + | |||
| + | Sehen Sie sich das folgende Beispiel an: | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | process_orders() | ||
| + | except ProcessingError as error: | ||
| + | print(error) | ||
| + | else: | ||
| + | try: | ||
| + | with open(' | ||
| + | read_data = file.read() | ||
| + | except FileNotFoundError as fnf_error: | ||
| + | print(fnf_error) | ||
| + | finally: | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | Die '' | ||
| + | |||
| + | <code terminal> | ||
| + | Processing Error occured. | ||
| + | Cleaning up, irrespective of any exceptions. | ||
| + | </ | ||
| + | |||
| + | ==== Auslösen einer Ausnahme ==== | ||
| + | |||
| + | Falls eine bestimmte Bedingung eintritt, können Sie mit '' | ||
| + | |||
| + | {{modul: | ||
| + | |||
| + | Um einen Fehler zu werfen, können Sie folgendes tun: | ||
| + | |||
| + | <code python> | ||
| + | x = 10 | ||
| + | if x > 5: | ||
| + | raise Exception(f" | ||
| + | </ | ||
| + | |||
| + | Wenn Sie den Code ausführen, erhalten Sie folgende Ausgabe: | ||
| + | |||
| + | <code terminal> | ||
| + | Traceback (most recent call last): | ||
| + | File "< | ||
| + | Exception: x should not exceed 5. The value of x was: 10 | ||
| + | </ | ||
| + | |||
| + | Das Programm hält an und präsentiert unsere Ausnahme auf dem Bildschirm, zusammen mit Hinweisen darüber, was schief gelaufen ist. | ||
| + | |||
| + | ==== Bedingungen sicherstellen ==== | ||
| + | |||
| + | Mit '' | ||
| + | |||
| + | {{modul: | ||
| + | |||
| + | Schauen Sie sich das folgende Beispiel an: | ||
| + | |||
| + | <code python> | ||
| + | x = -1 | ||
| + | | ||
| + | #if condition returns False, AssertionError is raised: | ||
| + | assert x > | ||
| + | </ | ||
| + | |||
| + | Wenn Sie diesen Code ausführen, ist das Ergebnis der Assertion '' | ||
| + | |||
| + | <code terminal> | ||
| + | Traceback (most recent call last): | ||
| + | File "< | ||
| + | assert x >= 0, "The value x should be positive." | ||
| + | AssertionError: | ||
| + | </ | ||
| + | |||
| + | In diesem Beispiel ist das Auslösen einer '' | ||
| + | |||
| + | <WRAP center important 100%> | ||
| + | **Achtung: | ||
| + | </ | ||
| + | |||
| + | ==== Zusammenfassung ==== | ||
| + | |||
| + | Nachdem Sie den Unterschied zwischen Syntaxfehlern und Ausnahmen gesehen haben, haben Sie verschiedene Möglichkeiten zum Auslösen, Abfangen und Behandeln von Ausnahmen in Python kennengelernt und gesehen wie man die folgenden Schlüsselwörter verwendet: | ||
| + | |||
| + | * In der '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * Mit '' | ||
| + | |||
| + | Hoffentlich hat Ihnen dieser Artikel geholfen, die grundlegenden Tools zu verstehen, die Python beim Umgang mit Ausnahmen zu bieten hat. | ||
| + | |||
| + | ---- | ||
| + | **Credits**: | ||