AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi for..in erlaubt kein "raise" im Exception-Handler, for..to hingegen schon
Thema durchsuchen
Ansicht
Themen-Optionen

for..in erlaubt kein "raise" im Exception-Handler, for..to hingegen schon

Ein Thema von Der schöne Günther · begonnen am 4. Jul 2018 · letzter Beitrag vom 4. Jul 2018
 
Der schöne Günther

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

for..in erlaubt kein "raise" im Exception-Handler, for..to hingegen schon

  Alt 4. Jul 2018, 09:58
Delphi-Version: 5
Ist hier wieder dunkle Compiler-Magic am Werk? Konstruierter Fall: Ich habe den Fall dass eine Methode entweder eine EProgrammerNotFound wirft oder eine EAggregateException mit einem Sack an Exceptions da drin.

Wenn ich nur EProgrammerNotFound-Exceptions bekomme ist alles in Butter und kann die behandeln. Ist noch etwas anderes dabei möchte ich die Exception weiter nach oben geben.

Es sieht so aus:

uses System.SysUtils, System.Threading
Delphi-Quellcode:
procedure p();
var
   ex: Exception;
begin
   try
      // do something amazing
   except
      on EProgrammerNotFound do
         findNewProgrammer();
      on e: EAggregateException do
         begin
            for ex in e do
               if (not (ex is EProgrammerNotFound)) then
                  raise; // E2145
            findNewProgrammer();
         end;
   else
      raise;
   end;
end;
Das klappt nur in der Theorie, denn der Compiler streicht das raise an und meint:

E2145 Wiederhervorrufen einer Exception ist nur im Exception-Handler möglich

Schreibe ich es hingegen um dass statt einem for..in ein klassisches for..x..to..y zum Einsatz kommt hat niemand etwas dagegen:

Delphi-Quellcode:
procedure p();
var
   ex: Exception;
   exIndex: NativeInt;
begin
   try
      // do something amazing
   except
      on EProgrammerNotFound do
         findNewProgrammer();
      on e: EAggregateException do
         begin
            for exIndex := 0 to Pred(e.Count) do
               if (not (e.InnerExceptions[exIndex] is EProgrammerNotFound)) then
                  raise;
            findNewProgrammer();
         end;
   else
      raise;
   end;
end;

Warum ist das so?
  Mit Zitat antworten Zitat
 


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 17:40 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