Autor Beitrag
Ritzeratze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101



BeitragVerfasst: Do 29.05.14 09:29 
Moin,

ich habe eine Verständnisfrage:

Wenn in einem try-Block mehrere Exception Handler definiert sind, wie (in welcher Reihenfolge) werden diese Execption Handler abgearbeitet?
Prinzipiell werden Exceptions doch dort abgearbeitet wo sie auftreten.

Gruss
Ritze
Yankyy02
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Do 29.05.14 09:51 
Hallo Ritzeratze,

folgender Link sollte deine Frage beantworten besonders Punkt 7.1.4 openbook.galileocomp...42-9252-46f4cd23489f

MfG

Gery

_________________
the quiter you become, the more you are able to hear
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 29.05.14 09:53 
Es wird der erste passende benutzt, sprich speziellere Exceptionklassen müssen immer vor ihren Vorfahren stehen, der Compiler prüft das. Siehe Doku:
msdn.microsoft.com/d...ibrary/0yd65esw.aspx hat folgendes geschrieben:
It is possible to use more than one specific catch clause in the same try-catch statement. In this case, the order of the catch clauses is important because the catch clauses are examined in order. Catch the more specific exceptions before the less specific ones. The compiler produces an error if you order your catch blocks so that a later block can never be reached.

Das gilt für Delphi z.B. genauso, wird dort aber nicht vom Compiler abgefangen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 29.05.14 14:56 
Zitat:
Wenn in einem try-Block mehrere Exception Handler definiert sind, wie (in welcher Reihenfolge) werden diese Execption Handler abgearbeitet?


Kurze Ergänzung. Es werden nie mehrere Handler abgearbeitet sondern immer nur einer benutzt! Und die Reihenfolge in der geprüft wird welcher verwendet wird ist einfach Top-Down. Man sollte die also immer nach Möglichkeit von der speziellsten zur allgemeinsten Exceptionklasse sortieren. Wenn du mehrer Exceptionhandler möchtest dann mußt du mehrerer try..catch Blöcke schachteln und die Exception per throw weiterwerfen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 29.05.14 16:20 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Man sollte die also immer nach Möglichkeit von der speziellsten zur allgemeinsten Exceptionklasse sortieren.
Ich habe es nicht ausprobiert, aber laut Doku kann man das gar nicht anders machen, da der Compiler einen Fehler wirft, wenn man eine falsche Reihenfolge wählt. (So wie er es ja auch sonst bei nie erreichbarem Quelltext macht.) :gruebel:
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 29.05.14 20:15 
Zitat:
Ich habe es nicht ausprobiert,

Ich jetzt aber. Ergebnis
Zitat:
A previous catch clause already catches all exceptions of this or of a super type ('System.Exception')

Die Doku hat offensichtlich recht ;)
Ritzeratze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101



BeitragVerfasst: Sa 31.05.14 09:54 
MOin ,

Danke für die ganzen Antworten. Das war sehr informativ und hat mich weitergebracht.

Gruss Ritze
Ritzeratze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101



BeitragVerfasst: So 01.06.14 11:15 
Moin, eine abschließende Frage,

Wenn ich eine "Top Down" Priorisierung vornehme und von dem speziellsten zum generalistischen Handler verarbeite, wo muss dann ein Exception Handler stehen der alle denkbaren Ausnahmen gleichzeitig behandelt? Muss ich diesen in der Main Methode implementieren?

Gruss Ritze
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 01.06.14 15:56 
Es gibt nicht den einen Ort wo man das tut. Ein Exceptionhandler gehört so nah oder fern von der eigentlichen problemauslösenden Stelle das man die sinnvoll verarbeiten kann und insbesondere sinnvoll entscheiden kann ob man hier abbricht oder das Programm weiterlaufen lässt. Wenn es einfach eine fixe Stelle gäbe würde es einem das Framework auch schon weitestgehend abnehmen.

Wenn du den Ort für eine letzte Verteidungslinie bevor das Programm abraucht suchst dann kommt es auf die Art des Programms an. Bei einer Konsolenanwendung ist es einfach die Main. Bei einer Winforms oder WPF Anwendung ist das zu spät da gibt es entsprechende Events in den Applivcation Klassen, bei Multithreadanwendungen muß man das je Thread berücksichtigen etc.