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?
Thema durchsuchen
Ansicht
Themen-Optionen

Try-Finally und Try-Except zusammen nutzen?

Ein Thema von OrNEC · begonnen am 25. Sep 2010 · letzter Beitrag vom 30. Sep 2020
Antwort Antwort
Seite 1 von 3  1 23      
OrNEC

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

Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 15:54
Delphi-Version: 7
Hallo, hab da eine Frage wo ich nicht weiter komme.
Ich schreibe wie folgt eine Datei:

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini:=TIniFile.Create('C:\Test.ini');
  try
    {hier schreiben}
  finally
    Ini.Free;
  end;
end;
Was ist allerdings wenn sich mein Programm auf einer CD befindet wo es keine Schreibrechte gibt? Da, hab ich gelesen, ist besser Try-Except zu verwenden, aber wenn ich Finally durch Except ersetze wie gebe die Ini frei?

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 25. Sep 2010, 15: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
 
#3

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

  Alt 25. Sep 2010, 16: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
 
#4

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

  Alt 25. Sep 2010, 16: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.184 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 25. Sep 2010, 16: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;
$2B or not $2B

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

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

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

  Alt 25. Sep 2010, 16:16
[edit] *verklickt*
$2B or not $2B

Geändert von himitsu (25. Sep 2010 um 16: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
 
#7

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

  Alt 25. Sep 2010, 16: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 sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

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

  Alt 25. Sep 2010, 17:14
Wenn man try..finally und try..except gemeinsam benötigt sollte man mal
über Unterfunktionen nachdenken.

In folgendem Beispiel werden Try..finally und try..except in verschiedenen
Methoden verwendet.
Der Code gewinnt dadurch an Klarheit und wird offener für zukünftige Veränderungen.
Delphi-Quellcode:
procedure TForm1.LoadIniFile(const filename:String);
var
  Ini : TIniFile;
begin
  Ini := TIniFile.Create(filename);
  try
  ...
  finally
    Ini.Free;
  end;
end;

procedure TForm1.LadeKonfig;
begin
  try
    LoadIniFile('myconfig.ini');
  except
    on E:Exception do
    begin
      E.Message := 'Konfiguration konnte nicht geladen werden'#13#10+
        E.Message;
      raise;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 25. Sep 2010, 17: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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

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

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

  Alt 25. Sep 2010, 18: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
Seite 1 von 3  1 23      


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 03:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz