AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Try-Finally und Try-Except zusammen nutzen?

Try-Finally und Try-Except zusammen nutzen?

Ein Thema von OrNEC · begonnen am 25. Sep 2010 · letzter Beitrag vom 30. Sep 2020
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.779 Beiträge
 
Delphi 12 Athens
 
#1

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 14:56
Delphi-Quellcode:
Ini := TIniFile.Create('C:\Test.ini');
try
  try
    {hier schreiben}
  except
    { hier die Exception aber auch behandeln! Bei Bedarf über raise weiterreichen. }
  end;
finally
  Ini.Free;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 15:01
Danke

Ich dachte auch so ähnlich, war mir aber nicht sicher, ob das so gemacht wird, wollte nen Profi fragen. Also danke noch ma!
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 15:08
Das ist der gängige Weg mit Delphi. In anderen Programmiersprachen hast du netterweise auch ein try-except-finally Konstrukt.

Zum Beispiel in Java:
Code:
try {

} catch (Exception e) {

} finally {

}
MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.580 Beiträge
 
Delphi 12 Athens
 
#4

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 15:13
Zum Beispiel in Java:
Code:
try {

} catch (Exception e) {

} finally {

}
Intern ist Try-Finally und Try-Except fast das Selbe, jedenfalls wird mit den selben Struckturen gearbeitet.

Das Problem ist aber, wenn in einem der Except/Finally-Blöcke eine Exception auftritt.
Darum braucht man eben 2 verschachtelte Schutzblöcke, Delphi baut sich sowas leider nicht selber zusammen.

sowas hätte mir auch gefallen
Delphi-Quellcode:
try

except

finally

end;
@xZise: Was passiert denn, wenn in Catch eine Exception auftritt?
Wird dann Finally noch ausgeführt?[/QUOTE]


Wierum man es letztendlich verschachtelt, hängt von der Aufgabe ab.
Delphi-Quellcode:
Ini := TIniFile.Create('C:\Test.ini');
try
  try
    ...
  except
    ...
  end;
finally
  Ini.Free;
end;
TIniFile greift im Constructor nicht auf die Datei zu, weswegen es hier geht.
TMemIniFile macht dieses aber, weshalb man es hier eventuell andersrum machen sollte, falls z.B. schon beim Öffnen/Auslesen ein Fehler auftritt.
Delphi-Quellcode:
try
  Ini := TMemIniFile.Create('C:\Test.ini');
  try
    ...
  finally
    Ini.Free;
  end;
except
  ...
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Sep 2010 um 15:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.580 Beiträge
 
Delphi 12 Athens
 
#5

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 15:16
[edit] *verklickt*
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Sep 2010 um 15:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 15:54
Moin himitsu,
[...]sowas hätte mir auch gefallen[...]
Joar manchmal ganz nett. Und da könnte die Compiler magic auch das in das "alte" Format umwandeln.


Delphi-Quellcode:
try

except

finally

end;
@xZise: Was passiert denn, wenn in Catch eine Exception auftritt?
Beurteile es selber:
Code:
C:\Users\xZise\Desktop\löschen>"C:\Program Files\Java\jdk1.6.0_21\bin\javac.exe"
 Main.java

C:\Users\xZise\Desktop\löschen>java Main
Throw an exception.
Exception caught. Throw another exception!
Now I'm in the finally block.
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:10)
Code:
public class Main {

    public static void main(String[] a) {
   
        try {
            System.out.println("Throw an exception.");
            int i = 2 / 0;
        } catch (Exception e) {
            System.out.println("Exception caught. Throw another exception!");
            int j = 2 / 0;
        } finally {
            System.out.println("Now I'm in the finally block.");
        }
        System.out.println("Good bye.");
    }

}
MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.580 Beiträge
 
Delphi 12 Athens
 
#7

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 16:17
Schön, dann scheint es in Java wenigstens richtig behandelt zu werden.


Aber sowas wie int j = 2 / 0; würde Delphi garnicht erst kompilieren
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 17:01
nun ja, Delphi macht da einiges mit:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Extended;
  j, k: Integer;
begin
// 1
ShowMessage(Format('%1.4f', [(5/0)]));

// 2
ShowMessage(FloatToStr(5/0));

// 3
i := 5/0;
ShowMessage(FloatToStr(i));

// 4
j := Trunc(5/0);
ShowMessage(IntToStr(j));

// 5
k := 5 div 0;
ShowMessage(IntToStr(k));
end;
Mit den beiden Zeilen, die mit 1, 2 und 3 beschriftet sind, hat Delphi absolut keine Probleme. Bei Zeile mit 4 meckert es mit "Konstantenausdruck verletzt untere Grenze" und erst bei der Zeile mit 5 bemerkt es, dass das jetzt schon wieder eine Division durch 0 ist und zeigt einen entsprechenden Fehler an.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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