AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

try ... except --> wann verwenden ???

Ein Thema von Christian18 · begonnen am 1. Aug 2007 · letzter Beitrag vom 2. Aug 2007
Antwort Antwort
Seite 2 von 3     12 3      
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#11

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:00
Ich vermisse unter Delphi einen Try-Except-Finally-End Block. Dann wären Speicherlecks recht komfortabel auszuschließen. C# hat sowas.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:05
Ich finde, man sollte Try ... Except Blöcke dann verwenden, wenn im Normalfall nichts passiert, aber eine Ausnahme (nichts anderes bedeutet ja 'Exception') gesondert behandelt werden sollte.

Zitat von Matze:
ich würde es da nutzen, wo Fehleingaben vom Benutzer Fehler verursachen würden bzw. allgemein da, wo Fehler leicht auftreten können. Wenn möglich solltest du jedoch try-except weitmöglich umgehen und lieber per if-Abfragen prüfen, ob etwas funktioniert hat oder nicht, finde ich. Das ist je nach Situation natürlich unterschiedlich.
Grausam, dabei kommt sehr unübersichtlicher Code heraus:
Delphi-Quellcode:
If ActionA=aSuccess Then
  If ActionB = Success Then
    If ActionC = Success Then
      If ActionD = Success Then
         .....
      else
        ....
   else
 ...
Oder auch
Delphi-Quellcode:
aResult := ActionA;
If aResult<>Success Then Exit;
aResult := ActionB;
If aResult<>Success Then Exit;
aResult := ActionC;
If aResult<>Success Then Exit;
aResult := ActionD;
If aResult<>Success Then Exit;
vs.
Delphi-Quellcode:
Try
  ActionA;
  ActionB;
  ActionC;
  ActionD;
Except
  Raise Exception.Create('Bei der Abarbeitung der Aktionen ist ein Fehler aufgetreten');
End;
Also, schreib mal übersichtlicheren und robusten Code ohne Try...Except.

Es ist natürlich beim Design und Debuggen etwas nervig, wenn einem Exceptions um die Ohren fliegen. Aber erstens kann man das ausschalten und zweitens ist es ja eine Ausnahme, die eben nur in Ausnahmefällen vorkommen sollte.

Programmfehler würde ich mit Assert-Anweisungen vermeiden, Logische Prüfungen von Eingaben vermutlich über einen Parser / DEA analysieren und bei einem Fehler eine Exception 'EUserInputException' schmeissen, die die genaue Ursache und Position beinhaltet.

Zum Beispiel vom Dezipaitor. Variante A (Wenn der Fehler weitergereicht werden soll);
Delphi-Quellcode:
MyOBject:= TMyObject.Create;
Try
  Try
    MyObject.CriticalMethod;
  Except
    On E:ESomeException Do Begin
      HandleSomeException (E);
      Raise
    End
  End
Finally
  MyObject.Free;
End;
Und wenn nicht:
Delphi-Quellcode:
MyObject:= TMyObject.Create;
Try
  MyObject.CriticalMethod;
Except
  On E:ESomeException Do
    HandleSomeException (E);
End;
MyObject.Free;
Letzteres ist die sog. 'Halts Maul' Variante, die man durch einen überflüssigen Try..Finally Block kapseln kann:
Delphi-Quellcode:
MyObject:= TMyObject.Create;
Try
  Try
    MyObject.CriticalMethod;
  Except
    On E:ESomeException Do
      HandleSomeException (E);
  End;
Finally
  MyObject.Free;
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#13

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:11
Beim Befüllen einer Caption halte ich es nicht sinnvoll (was soll dabei schief gehen und was soll ich anschließend mit der abgefangenen Exception machen)
Ich setze es immer nur dann ein, wenn ich nach einer schiefgelaufenen Aktion etwas unternehmen muss. Z.B. ein Rollback
Delphi-Quellcode:
StartTransaction
try
 ...
except
  RollBack;
  raise;
end;
Commit;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:48
[Klugscheiss]Da jedoch das Commit konzeptionell zur Aktion gehört, sollte man es auch in den Block packen [/Klugscheiss]
Delphi-Quellcode:
StartTransaction
try
...
  Commit;
except
  RollBack;
  raise;
end;
Es tut aber eigentlich Nichts zur Sache.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:56
Zitat von smudo:
Ich vermisse unter Delphi einen Try-Except-Finally-End Block. Dann wären Speicherlecks recht komfortabel auszuschließen. C# hat sowas.
wie wärs mit
Delphi-Quellcode:
try
  ...
  try
    ...
  except
    ...
  end;
finally
  ...
end;
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 13:58
Zitat von alzaimar:
Grausam, dabei kommt sehr unübersichtlicher Code heraus [...]
Zitat von Matze:
Das ist je nach Situation natürlich unterschiedlich.
Ich ging nun von Fehleingaben aus, die Christian angesprochen hat. Da würde ich persönlich beispielsweise eher TryStrToInt nutzen als einen try-except-Block. Aber das bleibt jedem selbst überlassen.
Bei komplexeren Strukturen, wie du sie ansprichst, ist das natürlich nicht sonderlich sinnvoll, auf try-except zu verzichten.
  Mit Zitat antworten Zitat
squetk

Registriert seit: 29. Aug 2004
Ort: Cottbus
118 Beiträge
 
Delphi XE2 Professional
 
#17

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 20:18
Zitat von alzaimar:
[Klugscheiss]Da jedoch das Commit konzeptionell zur Aktion gehört, sollte man es auch in den Block packen [/Klugscheiss]
Delphi-Quellcode:
StartTransaction
try
...
  Commit;
except
  RollBack;
  raise;
end;
Sehe ich nicht so, weil zwischen try und except doch Anweisungen stehen müssten, die im Fehlerfalle ein Rollback auslösen sollen. Das kann ich mir beim Commit als "Gegenstück" zum Rollback nicht vorstellen. Sollte beim Commit wider Erwarten eine Exception auftreten, wäre ein Rollback auch sinnlos.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: try ... except --> wann verwenden ???

  Alt 1. Aug 2007, 22:45
Moin squetk,

Zitat von squetk:
Sollte beim Commit wider Erwarten eine Exception auftreten, wäre ein Rollback auch sinnlos.
Das ist zwar richtig, aber der try/except-Block kapselt ja den Normalfall, der dann mit Commit abgeschlossen würde, womit Commit logisch in den Block gehört.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#19

Re: try ... except --> wann verwenden ???

  Alt 2. Aug 2007, 05:34
Weiterhin muss - bei korrekter ACID-Implementierung - das Rollback auch ein fehlerhaftes Commit rückgängig machen können.
Zitat von Matze:
Ich ging nun von Fehleingaben aus, die Christian angesprochen hat. Da würde ich persönlich beispielsweise eher TryStrToInt
Nach nochmaligem Lesen interpretiere ich Deine Äußerungen auch so. Mea Culpa.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#20

Re: try ... except --> wann verwenden ???

  Alt 2. Aug 2007, 11:06
Das fänd ich jetzt mal interessant.
Was kann dazu führen, dass ein Commit fehlschlägt - was ein Rollback reparieren könnte?
Und was ist ACID? Ich kenn nur die Musikrichtung
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:31 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