![]() |
Re: Falsche Verwendung von try...except...end
Zitat:
2.) Ja. Es wird unnötiger Speicher belegt. Und das u.U. über das Programmende hinaus René |
Re: Falsche Verwendung von try...except...end
Zitat:
nein sl wird nicht freigegeben, weil der Ablauf in den except-Teil springt und anschliessend die procedure verlassen wird. zu 2. du bekommst Speicherlöcher (memory leaks), weil der Speicher belegt bleibt und nicht neu zugewiesen werden kann. Ausserdem kannst Du unerwartete Nebeneffekte bekommen, wenn Du z.B. sl neu erzeugst. Also immer schauen, dass alle mit create angelegte Objekte auch wieder ein free erfahren. |
Re: Falsche Verwendung von try...except...end
:bounce2: Erster !
|
Re: Falsche Verwendung von try...except...end
Zitat:
|
Re: Falsche Verwendung von try...except...end
@Terminator
du kannst try-finally/except auch verschachteln :zwinker: entweder erst die excption behandeln und dann freigeben
Code:
=
try
{ ... } except { ... } finally { ... }
Delphi-Quellcode:
oder erst freigeben und dann die Exception
try
try ... except ... end; finally ... end;
Code:
=
try
{ ... } finally { ... } except { ... }
Delphi-Quellcode:
Aber stimmt schon ... zusammen (als ein Try-Block) hab ich's mir auch schon gewünscht :roll:
try
try ... finally ... end; except ... end; |
Re: Falsche Verwendung von try...except...end
Zitat:
wenn nur noch der Except-Block ausgeführt werden würde, das wäre ja schrecklich. Das ist nicht so! Es kann ja nicht sein, dass man bei ner Exception keine Möglichkeit mehr hat, hinter dem Teil mit der Exception weiterzumachen. Gruß Michael |
Re: Falsche Verwendung von try...except...end
Dass das noch niemandem aufgefallen ist:
Zitat:
Delphi-Quellcode:
// in folgendem Beispiel werden Daten aus einer Query gelesen
// Fehler werdem in einem Memo protokolliert und der Lesevorgang geht weiter // es werden keine Informationen unterdrückt, sondern die Fehlermeldungen werden protokolliert while not Query1.Eof do begin try try MachWas(Query1); except on E:Exception do begin MemoLog.Lines.Add('Fehler in MachWas'); MemoLog.Lines.Add(E.ClassName+':'+E.Message); MemoLog.Lines.Add('Record: ' +IntToStr(Query1.RecNo); end; end; finally Query1.Next; // nächster Datensatz end; end; |
Re: Falsche Verwendung von try...except...end
@Sidorion: da hast du natürlich Recht, aber dein Lösungsvorschlag war nicht so gut.
Delphi-Quellcode:
Das Query1.Next ist nun an der richtigen Stelle; try..finally wird hier nicht benötigt.
// in folgendem Beispiel werden Daten aus einer Query gelesen
// Fehler werdem in einem Memo protokolliert und der Lesevorgang geht weiter // es werden keine Informationen unterdrückt, sondern die Fehlermeldungen werden protokolliert while not Query1.Eof do begin try MachWas(Query1); except on E:Exception do begin MemoLog.Lines.Add('Fehler in MachWas'); MemoLog.Lines.Add(E.ClassName+':'+E.Message); MemoLog.Lines.Add('Record: ' +IntToStr(Query1.RecNo); end; end; Query1.Next; // nächster Datensatz end; |
Re: Falsche Verwendung von try...except...end
Schon, aber Du weißt ja, wie das ist: In fünf Monaten macht da irgendwer ein raise; dran und dann wars wieder keiner ;)
|
AW: Falsche Verwendung von try...except...end
Die 5. Sünde ist Unfug (zumindest bei Delphi 6 - hab gerade keine andere Version parat).
Einen finally-Handler benötigt man nur, wenn man Exceptions nicht gesondert behandeln möchte. Selbstverständlich wird nach dem Except normal weitergemacht und eben nicht die Prozedur verlassen!
Delphi-Quellcode:
Beide ShowMessage werden ausgeführt.
procedure TForm1.Button1Click(Sender: TObject);
var a,b: double; begin try b := 0; a := 666; a := 10 / b; except ShowMessage('nulldivision'); end; ShowMessage(FloatToStr(a)); end; Ich weiß, dass dieser Thread alt ist, aber leider ist das der 3. Google-Treffer, wenn man nach Delphi-Exception sucht. Habe mich extra angemeldet in der Hoffnung, dass der Threadersteller seinen Eingangsbeitrag noch editieren könnte, damit nicht weiterhin diese Unwahrheit verbreitet wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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