Fehler melden hält das gesamte Programm an diesem Punkt an (außer die Ausnahme ist) gefangen), während gedruckt wird, schreibt die Nachricht einfach etwas in stdout
- die Ausgabe möglicherweise an ein anderes Tool weitergeleitet oder jemand führt Ihre Anwendung möglicherweise nicht über die Befehlszeile aus, und die print
-Ausgabe wird möglicherweise nie angezeigt.
Zum Beispiel, was ist, wenn Ihr Code wie folgt aussieht:
%Vor%und ich rufe dein Skript wie folgt auf:
yours.py nummer_quelle.txt | sum_all_lines.sh
Wenn yours.py
Klartext zwischen Zahlen ausgibt, dann wird vielleicht mein sum_all_lines.sh
fehlschlagen, weil es alle Zahlen erwartet hat. Wenn yours.py
aufgrund einer Ausnahme beendet wird, endet sum_all_lines.sh
jedoch nicht und es wird mir klar, warum die Summe fehlgeschlagen ist.
Das ist natürlich nur ein Beispiel, und Ihr spezieller Fall könnte ganz anders aussehen.
Das hängt davon ab, ob Sie size < 0
an dem Punkt verarbeiten können, an dem size < 0
erkannt wurde.
Wenn Sie damit umgehen können, indem Sie sofort drucken, löst print
andernfalls eine Ausnahme aus, um die Behandlung dieser Bedingung an etwas weiter oben im Callstack zu delegieren:
In dem (zugegebenermaßen sehr konstruierten) Beispiel oben weiß die Funktion divide_three_by
nicht, was zu tun ist, wenn Sie 0 übergeben - manchmal möchten Sie vielleicht nur eine Nachricht drucken (zB wenn val
von einer Benutzereingabe kommt) ), manchmal möchten Sie es einfach ignorieren und einen Standardwert zuweisen. Da die Funktion nicht weiß, was zu tun ist, sollte sie die Verantwortung für die Verarbeitung dieser Bedingung an den Callstack zu dem übergeben, was sie aufgerufen hat (und wenn sie dort nicht behandelt werden kann, wird sie solange weitergereicht, bis etwas sie behandelt oder bis die oberste Ebene erreicht ist, an der Ihr Programm beendet wird.
Weitere Informationen zum Umgang mit Exceptions in Python finden Sie in der Fehler- und Exceptions-Einführung in der Python-Dokumentation .
Eine weitere Überlegung ist die Entwicklung eines Moduls, das möglicherweise in anderen Programmen verwendet wird. In diesem Fall ist es vorzuziehen, eine Ausnahme auszulösen und den aufrufenden Code den Fehler behandeln zu lassen. Der Anrufer sollte wissen, dass etwas schief gelaufen ist und dementsprechend handeln.
... richie
Der Hauptunterschied besteht darin, ob das Programm nach der Fehlerprüfung weiterläuft oder nicht.
Für diesen Fall:
%Vor% Dadurch wird nur die Nachricht an die Standardausgabe ausgegeben und das Programm wird nach der Überprüfung fortgesetzt. Wenn Sie also später in Ihrem Code size
verwenden und weniger als 0
, erhalten Sie möglicherweise einen Fehler.
Für den anderen Fall:
%Vor%In diesem Fall wird das Programm nach der Prüfung nicht fortgesetzt, es wird eine Ausnahme ausgelöst. Wenn es nicht behandelt wird, wird das gesamte Programm beendet.
In den meisten Fällen möchten Sie eine Exception auslösen und einen äußeren Exception-Handler haben, der die Exception abfängt und die Verwendung des Fehlers mitteilt und ihnen nach Möglichkeit erlaubt, die Eingabe erneut einzugeben.