AGB  ·  Datenschutz  ·  Impressum  







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

Schleifenabbruch durch exception verhindern

Ein Thema von bernhard_LA · begonnen am 22. Jan 2015 · letzter Beitrag vom 22. Jan 2015
Antwort Antwort
Seite 1 von 2  1 2      
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 13:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 14:21
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.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 14:25
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 14:42
Hopsa, mit try-except verwechselt ... peinlich.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 17:21
Hopsa, mit try-except verwechselt ... peinlich.
was fehlt ist ein

Delphi-Quellcode:
try

FinallyAndExcept
end;
Mavarik
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 17:26
wat
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 17:33
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 17:34
wie oft hat man

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

Delphi-Quellcode:
try
...
FinallyAndExcept
end;
Dat is nen Featurerequst @EMBT
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 17:59
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.

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.

Geändert von Der schöne Günther (22. Jan 2015 um 18:03 Uhr)
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 18:00
Dat is nen Featurerequst @EMBT
+ 1
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:06 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