AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dokumentation und Exceptions - Wann muss ich was erwarten?
Thema durchsuchen
Ansicht
Themen-Optionen

Dokumentation und Exceptions - Wann muss ich was erwarten?

Offene Frage von "sahimba"
Ein Thema von Der schöne Günther · begonnen am 6. Jun 2013 · letzter Beitrag vom 6. Jun 2013
Antwort Antwort
Seite 2 von 2     12   
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 15:49
Dort finde ich:
Delphi-Quellcode:
try
   // Establish the connection.
   SQLConnection1.Connected := true;
   executeButton.Enabled := true;
   outputMemo.Text := 'Connection established!';
except
   on E: EDatabaseError do
      ShowMessage('Exception raised with message' + E.Message);
end;
Abgesehen davon, dass ich nicht einsehe, warum man die beiden Oberflächen-bezogenen Anweisungen nicht nach dem try-Block ausführen sollte
Naja, ganz einfach deshalb, weil die Ausführung nach dem except-Block ja ganz normal fortgesetzt wird. Da stünde dann „Connection established“, selbst wenn gar keine Verbindung aufgebaut werden konnte.

Ansonsten, da ich jetzt eine Weile mit Java arbeiten musste, gebe ich dir recht, dass Exceptions in Delphi besser dokumentiert sein könnten. Allerdings hatte ich in Delphi trotzdem nie Probleme damit (Ausnahme: Indy-Bibliothek, weil da einfach für alles eine Exception geworfen wird, selbst wenn es kein Fehler ist. Deshalb verwende ich die nicht mehr).

Wenn es dir wirklich nur darum geht, dass der Benutzer keine Fehler-Popups erhält, dann solltest du meiner Meinung nach einfach „Exception“ abfangen. Java-Checkstyle hat mir das nicht erlaubt, aber manchmal ist es nun mal wirklich genau das, was man will. Aber man sollte die Exception natürlich nicht einfach still schlucken, sondern an eine globale Fehlerbehandlungsmethode weiterleiten (z.B. zum loggen).

Oder unter Delphi gibt es noch eine weitere Möglichkeit, nämlich TApplication.OnException zu hooken. Das wäre sozusagen die letztmögliche Ebene, auf der eine Exception abgefangen werden kann, wenn alles andere versagt hat.

Die erste Methode kann trotzdem in manchen Situationen sinnvoll sein: Nehmen wir zum Beispiel mal an, dass unser Code alle Ordner rekursiv in einem Baum darstellen soll.

Delphi-Quellcode:
procedure VerzeichnisAuflisten(Verzeichnis: String);
begin
  for UnterVerzeichnis in Verzeichnis do
    VerzeichnisAuflisten(UnterVerzeichnis);
end;
Wenn jetzt ein Unterverzeichnis nicht eingelesen werden kann (aus welchem Grund auch immer), dann wollen wir ja wahrscheinlich trotzdem noch die anderen einlesen und nicht die ganze Operation abbrechen.

Delphi-Quellcode:
procedure VerzeichnisAuflisten(Verzeichnis: String);
begin
  try
    for UnterVerzeichnis in Verzeichnis do
      VerzeichnisAuflisten(UnterVerzeichnis);
  except
    on E: Exception do:
      Log(E);
  end;
end;

Geändert von Namenloser ( 6. Jun 2013 um 15:57 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 16:28
Naja, ganz einfach deshalb, weil die Ausführung nach dem except-Block ja ganz normal fortgesetzt wird.
Klar, im Exception-Fall hätte ich (wenn sinnvoll) dann auch die Methode verlassen. Aber das ist wohl persönlicher Stil.

Genau Java hat mir das auch mehr oder weniger angewöhnt, das ist bislang das einzige, was ich aus anderen Programmiersprachen wirklich in Delphi vermisse: Entweder man muss die Exception fangen, oder die Methode macht es mit dem Schlüsselwort throws explizit deutlich (und die aufrufende Methode muss es fangen).

Oder unter Delphi gibt es noch eine weitere Möglichkeit, nämlich TApplication.OnException zu hooken
Klasse, das ist mir viel wert!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#13

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 17:34
Ansonsten, da ich jetzt eine Weile mit Java arbeiten musste, gebe ich dir recht, dass Exceptions in Delphi besser dokumentiert sein könnten. Allerdings hatte ich in Delphi trotzdem nie Probleme damit (Ausnahme: Indy-Bibliothek, weil da einfach für alles eine Exception geworfen wird, selbst wenn es kein Fehler ist. Deshalb verwende ich die nicht mehr).
Ein weit verbreiteter Irrtum: Exceptions mit Fehlern gleichzusetzen. Exception heisst übersetzt nur "Ausnahme", und das trifft ihren Zweck besser - sonst würden sie "Error" heissen.

Eine Exception ist nicht mehr als eine Ausnahme vom erwarteten, regulären Programmablauf. In der richtigen Dosis eine enorme Hilfe, da man mit ihnen leichter lesbaren Code schreiben kann, vor allem wenn Fehler in unteren Ebenen der Verarbeitung auftreten können.

Ohne Exceptions wäre eine Behandlung der Fehler, die in tieferen Schichten (Bibliotheken und deren Unter-Bibliotheken) auf Anwendungsebene nur möglich, wenn man alle denkbaren Fehlercodes in Rückgabeparametern an den eigenen Code hochreicht.

Wenn man sich von der Vostellung "Exception = Fehler" löst, ist Indy eher ein Beispiel für elegante und sinnvolle Nutzung von Exceptions.

EProgrammerNotFound ist eher ein Negativbeispiel
Michael Justin
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 17:38
Ja, die wird bei mir immer geworfen wenn ich im Urlaub bin.

Das sehe ich auch so. Exceptions setze ich gerne ein und habe auch nichts dagegen, an allen Ecken und Enden auf die verschiedensten Dinge reagieren zu können.

Nur es muss einem bitte auch jemand sagen, was wo auftreten kann. Sonst kann einem das wirklich alles durcheinander würfeln. Das gleiche Problem hatte ich bei einem kurzen Spiel mit Indy auch: Nichts gegen Werfen von Exceptions an allen möglichen Stellen. Aber diese Stellen muss man auch ohne eine halbe Stunde Nachbohren erkennen können.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 18:08
Es gibt halt Exceptions, die können immer auftreten, z.B. die von EExternal abgeleitet sind oder auch EOutOfMemory. Diese Exceptions werden ja nicht explizit im Programmcode ausgelöst, sondern entstehen auf Grund einer unerwarteten Umgebungsbedingung. In manchen Fällen kann man diese Exceptions durch vorheriges Prüfen vermeiden. Trotzdem muss man immer damit rechnen. Schließlich ist niemand unfehlbar. Es macht aber wenig sinn, jede potentiell gefährliche Code-Zeile mit einem try-except-Block zu schützen und alle denkbaren Exceptions abzufangen (wobei oft fraglich ist, was dann geschehen soll). Damit wäre der Vorteil von Exceptions ad absurdum geführt.

Wenn der User schon keine dieser Exceptions zu sehen bekommen soll, dann bietet sich Application.OnException sicher an. Ich würde dann aber gleich ein Tool wie madExcept einsetzen, das mir in dem Fall auch noch alle nötigen Informationen zur Verfügung stellt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 18:40
maxExcept. Faszinierend.

Wieder was Neues kennen gelernt, das sieht nett aus. Danke dafür.


Nur wie gesagt: Klar gibt es Dinge, die man einfach nicht vorhersehen kann. Mein eingangs genanntes Beispiel ist aber vollkommen offensichtlich: Die Datenbankverbindung schlägt fehl, das Ding wirft eine Exception. Das ist vollkommen vorhersehbar. Die Dokumentation lässt das vollkommen unter den Tisch fallen, und ich finde das ein absolutes Unding. Wahrscheinlich macht mich auch nur diese schreckliche Hitze so aggressiv...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 20:22
Ein weit verbreiteter Irrtum: Exceptions mit Fehlern gleichzusetzen. Exception heisst übersetzt nur "Ausnahme", und das trifft ihren Zweck besser - sonst würden sie "Error" heissen.

Eine Exception ist nicht mehr als eine Ausnahme vom erwarteten, regulären Programmablauf.
Ja, aber sowas wie „Connection closed gracefully“ ist nun wahrlich keine „Ausnahme“.

Indy hat mich schier in den Wahnsinn getrieben, weil ich in jeder Methode hundert „Ausnahmen“ abfangen musste, die den Programmablauf in keinster Weise beeinflusst hätten, wenn Indy nicht durch die Exception selbst das Programm fünf Aufrufs-Ebenen weiter oben unnötig zum Abschmieren gebracht hätte.

Es ist vielleicht Geschmackssache, aber ich fand Synapse deutlich angenehmer zu benutzen.
  Mit Zitat antworten Zitat
sahimba

Registriert seit: 14. Nov 2011
Ort: Berlin, Hauptstadt der DDR
137 Beiträge
 
Delphi 10 Seattle Professional
 
#18

AW: Dokumentation und Exceptions - Wann muss ich was erwarten?

  Alt 6. Jun 2013, 20:59
Ja, aber sowas wie „Connection closed gracefully“ ist nun wahrlich keine „Ausnahme“.
EAbort ja auch nicht "wirklich". Trotzdem hat EAbort seine Berechtigung. „Connection closed gracefully“ ist quasi das Jedi-Äquivalent zu EAbort. Aus dem Grunde kann man auch im Debugger Exceptionklassen festlegen, welche ignoriert werden. Diese "stillen" Exceptions sollte man sinnvollerweise in seiner Anwendung dann ebenso auf oberer Ebene filtern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 22:51 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