Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Schleifenabbruch durch exception verhindern (https://www.delphipraxis.net/183608-schleifenabbruch-durch-exception-verhindern.html)

bernhard_LA 22. Jan 2015 12:53

Schleifenabbruch durch exception verhindern
 
mein code geht ungefährt wie folgt

Delphi-Quellcode:
     for i := 0 to MaxLoop do
       begin

         try
          aClass := TClass.Create(...)
          aClass.DoA;
          AClass.Do...;


          if AClass.result >0  then
               begin

                 ///  Ergebnisse auswerten
                 ....
                 ....
               end;

         finally
         AClass.Free;
         end;

       end;

AClass umfasst einige 1000 Zeilen Code .
Aktuell wirft AClass mit bestimmten Daten gefüttert eine Exception, vermutlich greife ich in der komplexen Klasse A auf ein internes Feld mit einem falschen Index zu.
Technisch bekomme ich dieses Problem nicht schnell gelöst. Könnte ich als kurzfristige Lösung alle Exceptions ignorieren und die Schleife trotzdem durchlaufen und komplett abarbeiten.

baumina 22. Jan 2015 13:21

AW: Schleifenabbruch durch exception verhindern
 
Eine einzige try-finally um 1000 Zeilen Code ist natürlich ein echtes Problem, da wirst wohl keine "einfache kurzfristige" Lösung finden. Die Schleife wird ja auf jeden Fall komplett durchlaufen, nur der riesige try-finally-Block halt nicht.

Uwe Raabe 22. Jan 2015 13:25

AW: Schleifenabbruch durch exception verhindern
 
Zitat:

Zitat von baumina (Beitrag 1287446)
Die Schleife wird ja auf jeden Fall komplett durchlaufen, nur der riesige try-finally-Block halt nicht.

Nee! Die Schleife bricht nach dem finally ab und die Exception wird an die nächste Ebene weitergereicht.

So könnte man es lösen:

Delphi-Quellcode:
  for i := 0 to MaxLoop do begin
    aClass := TClass.Create();
    try
      try
        aClass.DoA;
        AClass.Do;

        if aClass.result > 0 then begin
          /// Ergebnisse auswerten
        end;
      except
        { Bug noch diesen Monat fixen! }
        if Now > EncodeDate(2015, 1, 31) then
          raise;
      end;
    finally
      aClass.Free;
    end;
  end;

baumina 22. Jan 2015 13:42

AW: Schleifenabbruch durch exception verhindern
 
Hopsa, mit try-except verwechselt ... peinlich.

Mavarik 22. Jan 2015 16:21

AW: Schleifenabbruch durch exception verhindern
 
Zitat:

Zitat von baumina (Beitrag 1287448)
Hopsa, mit try-except verwechselt ... peinlich.

was fehlt ist ein

Delphi-Quellcode:
try

FinallyAndExcept
end;
Mavarik

Der schöne Günther 22. Jan 2015 16:26

AW: Schleifenabbruch durch exception verhindern
 
wat :roteyes:

Uwe Raabe 22. Jan 2015 16:33

AW: Schleifenabbruch durch exception verhindern
 
Zitat:

Zitat von Mavarik (Beitrag 1287471)
was fehlt ist ein

Delphi-Quellcode:
try

FinallyAndExcept
end;

Das ist aber wieder etwas anderes, denn das finally wird immer ausgeführt, während das except nur im Fehlerfall ausgeführt wird. Aber sowas hier wär manchmal schön:

Delphi-Quellcode:
try
  ...
except
  ...
finally
  ...
end;
Wobei ich mir da sogar vorstellen kann, daß man über die Anordnung try - except - finally oder try - finally - except auch festlegen kann, ob der except- oder der finally-Code erst ausgeführt werden soll. Aber ehrlich gesagt tun es ja auch die beiden geschachtelten try-Blöcke.

Mavarik 22. Jan 2015 16:34

AW: Schleifenabbruch durch exception verhindern
 
wie oft hat man

Delphi-Quellcode:
try
 try
 except
 end;
finally
end;
besser ein

Delphi-Quellcode:
try
...
FinallyAndExcept
end;
Dat is nen Featurerequst @EMBT

Der schöne Günther 22. Jan 2015 16:59

AW: Schleifenabbruch durch exception verhindern
 
In Java gibt es bspw.
Code:
try {
   // Stuff
}
catch(IOException e) {
   System.out.println("Exception: ");
   e.printStackTrace();
}
finally {
   // Stuff
}

Das zwingend in try..except und try..finally aufzusplitten ist eins der wenigen Dinge die ich in Pascal irgendwie schöner als anderswo finde. :thumb:

Liegt wahrscheinlich an der Einrückung, man sieht so deutlicher was auf jeden Fall abläuft und was nur im Fehlerfall. In Javas try..catch..finally sieht das alles gleichberechtigt aus.

mm1256 22. Jan 2015 17:00

AW: Schleifenabbruch durch exception verhindern
 
Zitat:

Zitat von Mavarik (Beitrag 1287474)
Dat is nen Featurerequst @EMBT

+ 1 :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz