Announcement

Collapse
No announcement yet.

try, finally und except

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • try, finally und except

    hi,

    wenn ich try verwende, kann ich dann finally und except gleichzeitig schreiben und wenn ja wie macht man das?
    ich brauche beides!!!

    gruß

    Markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    nach der Online-Hilfe nicht. Ich zitiere wie folgt:

    Eine try...finally-Anweisung hat folgende Syntax:

    try Anweisungsliste1 finally Anweisungsliste2 end

    Jede Anweisungsliste setzt sich aus einer Folge von Anweisungen zusammen. In einem try...finally-Block werden zuerst die Programmzeilen in Anweisungsliste1 (try-Klausel) ausgeführt. Wenn dabei keine Exceptions auftreten, wird anschließend Anweisungsliste2 (finally-Klausel) ausgeführt. Bei einer Exception wird die Steuerung an Anweisungsliste2 übergeben und danach die Exception erneut ausgelöst. Befindet sich ein Aufruf der Standardprozedur Exit, Break oder Continue in Anweisungsliste1, wird dadurch automatisch Anweisungsliste2 aufgerufen. Daher wird die finally-Klausel unabhängig davon, wie der try-Block beendet wird, immer ausgeführt.

    Wenn eine Exception ausgelöst, aber in der finally-Klausel nicht behandelt wird, führt sie aus der try...finally-Anweisung hinaus, und jede zuvor in der try-Klausel ausgelöste Exception geht verloren. In der finally-Klausel sollten daher alle lokal ausgelösten Exceptions behandelt werden, damit die Behandlung anderer Exceptions nicht gestört wird.

    Gruß
    Pete

    Comment


    • #3
      mhm.....
      klingt doch aber so, als ob man im finally exceptions behandeln kann oder?

      gruß

      Marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo!

        Wenn ich es richtig verstanden habe willst Du a) Exceptions auswerten und ZUSÄTZLICH b) den finally Block haben

        Sorry wegen der mistigen Formatierung...
        try
        try
        strtoint ( 'abc' );
        except
        on e:exception do begin
        //a)
        showmessage ( 'Hallo'+#13+e.message );
        end;
        end;
        finally
        //b)
        showmessage ( 'ende' );
        end;

        Zeigt beide Showmessage Aufrufe an.

        BYE BERN

        Comment


        • #5
          hi bernd!

          achso ZWEI try-blöcke! das ist tricky!
          ich teste mal gleich!

          gruß

          Marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Hallo Bernd,
            was passiert, wenn Du den finally-Block wegläßt?

            try
            strtoint ( 'abc' );
            except
            on e:exception do begin
            //a)
            showmessage ( 'Hallo'+#13+e.message );
            end;
            end;
            //b)
            showmessage ( 'ende' )

            Comment


            • #7
              Hallo Bernd,
              was passiert, wenn Du den finally-Block wegläßt?

              try
              strtoint ( 'abc' );
              except
              on e:exception do begin
              //a)
              showmessage ( 'Hallo'+#13+e.message );
              end;
              end;
              //b)
              showmessage ( 'ende' )

              Comment


              • #8
                Moin Dietmar,

                ???
                Meinst Du, dass sich dann nichts ändert? ... ist in diesem Beispiel zwar richtig - aber das Verhalten ändert sich dramatisch, wenn im except-handling abschließend "raise" aufgerufen wird. Und darum, dass der "finally"-Block auf jeden Fall aufgerufen wird, geht es ja eigentlich ... .

                Gruß,
                Geer

                Comment


                • #9
                  Hallo!

                  Dann bleibt nur die Auslagerung der Kommandos aus dem Finally-Bereich in eine lokale Procedure. Die kann man dann sowohl im finally, als auch im Except-Bereich (vor dem raise) aufrufen...

                  "Luxus schafft Probleme"
                  Andreas Kosch auf einer Entwicklerkonferenz

                  BYE BERN

                  Comment

                  Working...
                  X