Bitte kein ShowMessage verwenden um Exceptions anzuzeigen.
Solle dies in einer Schleife vorkommen, die >20 Durchläufe hat, dann klickt man sich die Finger wund.
Es ist wirklich eine Unsitte bei Exceptions die Procedure ShowMessage zu verwenden.
Beispiel Webservice: ich will die
Exception nicht auf dem Server angezeigt haben,
sondern die
Exception muss aufsteigen im Code.
Weit oben sitzt dann ein Exceptionhandler, der die
Exception a). mitloggt und b).
eine entsprechende
XML/
HTML-Seite mit der Meldung aufbereitet und dem Client präsentiert.
Hier ist ein Beispielcode, wie man Exceptions richtig behandelt:
Delphi-Quellcode:
filename := '
C:/Programme/Delphi/test.txt';
sl := TStringList.Create;
try
try
sl.loadfromfile(filename);
except
on E:
Exception do
begin
E.
Message := Format('
Datei <%s> kann nicht geladen werden.'#13#10, [filename])+
E.
Message;
// orginale Meldung bleibt erhalten
raise;
end;
finally
sl.Free;
end;
Angenommen, der Benutzer hat kein Zugriff auf die Datei.
Dann bekommt er folgende Meldung präsentiert:
Code:
Datei <C:/Programme/Delphi/test.txt> kann nicht geladen werden.
Zugriff verweigert.
Das ist eine Meldung, mit der man wirklich etwas anfangen kann.
Dagegen wären die Meldungen
Code:
Die Datei ist nicht vorhanden!
oder
eher falsch bis nutzlos.
Bei einem kleinen Programm ist das nicht so schlimm, aber wenn ein Programm
mit dutzenden Formularen und zig Dateien meldet "Die Datei ist nicht vorhanden!"
dann wird der Benutzer mit Sicherheit seinen Kopf gegen die Wand hauen.
Hier nochmal die
goldenen Regeln zum Behandeln von Exceptions:
1.) kein ShowMessage oder irgendetwas, das den Programmablauf aufhält einsetzen
2.) Informations Anreicherung:
wenn ich die
Exception nicht selbst behandeln kann, so kann ich zumindest
die Meldung um sinnvolle Information erweitern und dann die
Exception aufsteigen lassen.
Beispiel: ich lese eine Datei Zeile für Zeile und interpretiere die Daten.
In der For-Schleife sollte dann ein Exceptionhandler sitzen,
der die Fehlermeldung um "Fehler Verarbeiten der bla-bla Daten. (Zeile %d)" erweitert.
3.) keine Unterdrückung von Information
die orginale Meldung muss immer erhalten bleiben!
4.) wenn ich nichts beitragen kann, dann Finger weg von try..except
5.) leere except..end Blöcke sind (fast) immer ein Hinweis, dass hier etwas unsauber ist
Das Problem liegt dann zwischen try und except.
Das war jetzt fast ein Minitutorial, aber da steckt die Erfahrung von Jahren drin.
Ja und auch ich habe stundenlang meinen Sourcecode durchsucht weil ich ShowMessage innerhalb von except..end verwendet habe.
Jetzt natürlich nicht mehr.