![]() |
Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
Zitat:
|
Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
Zitat:
Im QuellCode ist "." der Dezimaltrenner. (wäre och blög, wenn der Deutsche keine englischen Progamme kompilieren könnte :stupid: ) Zitat:
siehe ![]() ![]() |
Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
Das weicht jedoch alles vom eigentlichen Thema ab.
@IngoD7: Es ist ja nicht so das ich nur auf Grund dieses Fehlers ein Exception bekomme. Das war halt jetzt 1 Fehler der mir aufgefallen ist und wo ich vielleicht von der Programmierung her etwas unwissentlich gehandelt habe. Zumal eben Delphi intern mit '.' rechnet. |
Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
Um das angesprochene Problem zu beheben, nutze ich immer einen solchen (oder ähnlich gelagerten) Code:
Delphi-Quellcode:
Function MyStrToFloat(AString: String): Float;
Begin AString := StringReplace(AString, '.', DecimalSeparator, []); AString := StringReplace(AString, ',', DecimalSeparator, []); Result := StrToFloat(AString); End; |
Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
Delphi erzeugt ja gerne mal Exceptions, die so allgemein sind, dass der Benutzer nichts damit anfangen kann. (z.B. "ungültige Variantumwandlung")
Hier muss man als Programmierer mitdenken und an strategisch günstigen Stellen die Exception abfangen, erweitern und neu auslösen:
Delphi-Quellcode:
Man hütte sich davor, anstelle von Raise etwa ShowMessage zu verwenden. :warn:
procedure TForm1.ButtonImport(Sender:TObject);
begin if FileDialog1.Execute then begin try ImportXMLfile(FileDialog1.Filename); except on E:Exception do begin // sinn- und gehaltvolle Fehlermeldung bilden E.Message := 'XML - Import'#13#10+ 'Fehler beim Importieren der Datei <'+FileDialog1.Filename+'>'#13#10+ E.Message; // auf jeden Fall die orginale Meldung anhängen !! Raise; // Exception erneut auslösen end; end; end; end; Mit dieser Technik kann man Programme schreiben, die jederzeit präzise Fehlermeldungen ausgeben, mit denen sowohl der Benutzer, als auch der Programmierer etwas anfangen kann. Sinnvoll lässt sich diese Technik auch innerhalb von Schleifen einsetzen:
Delphi-Quellcode:
for i := 0 to stringlist.Count-1 do
begin try ImportCSVdaten(stringlist[i]); except on E:Exception do begin E.Message := Format('Fehler in Zeile %d'#13#10, [i])+ E.Message; raise; end; end; end; |
Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
Tach,
um mal wieder auf das Anfangsthema zurückzukommen:
Delphi-Quellcode:
Die Fehlerausgabe sieht dann ungefähr so aus:
try
//fehlerhafter Quelltext except Assert(false,'Fehler SoUndSo'); end; Zitat:
Grüße der MAX |
Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
Kann man das Assert() auch in die Logfile bzw. in ne String-Variable lenken?
Da es ja ein Dienst ist sollte es nicht als MsgBox oder derartiges kommen. Als ich mit dem Assert mal kurz gespielt hab ist mir aufgefallen, das immer genau die Zeile ausgegeben wird in der das Assert(false) ist. Irgendwie bringt mich das dann im Except auch nicht weiter weil ich ja anfänglich sagte, das der try-Block recht groß ist und ich ja die Zeile von dem Fehler und nicht von dem Exception brauche. Bleibt mir wohl wirklich nix anderes übrig als nach eine der Bereits genannten Lösungen vorzugehen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz