Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi try..except im try..except - Reihenfolge des Aufrufes (https://www.delphipraxis.net/126959-try-except-im-try-except-reihenfolge-des-aufrufes.html)

haentschman 5. Jan 2009 18:53


try..except im try..except - Reihenfolge des Aufrufes
 
Guten Abend alle miteinander... :P

folgende Konstellation:
Delphi-Quellcode:
try
.
.
A;
.
.
except
  CodeA;
end;

procedure A;
begin
  try
    .
    .
  except
    CodeB
  end;
end;
- Procedure A wird in einem try/except Block ausgeführt.
- in der Procedure A steht ebenfalls ein try/except Block.

:gruebel: tritt in Procedure A in dem try/except Block eine Exception auf wird CodeA ausgeführt.
:gruebel: ich dachte eigentlich, daß die Reihenfolge CodeB, wenn die Exception in Procedure A auftritt bzw. CodeA wenn die exception in einer der anderen Anweisungen des ersten try/except auftritt.

Frage: kann ich die Priorität beeinflussen oder ist das as Designed :roll:

Danke für Infos. :hi:

SirThornberry 5. Jan 2009 18:56

Re: try..except im try..except - Reihenfolge des Aufrufes
 
wenn zwischen dem Try-Except in ProcedureA ein Fehler auftritt sollte CodeB ausgeführt werden und CodeA gar nicht außer du wirfst du Exception erneut. Wenn das bei dir anders ist hast du irgendwas kaputt gemacht :mrgreen:

haentschman 5. Jan 2009 19:04

Re: try..except im try..except - Reihenfolge des Aufrufes
 
Zitat:

außer du wirfst du Exception erneut.
:oops: hatte ich vergessen zu erwähnen.
- in jedem except setze ich einen speziellen internen Fehlertext und löse die Exception erneut aus.
- dann hast du Recht und die Exception kommt in dem anderen except raus, dann wieder raise und ich lande in meiner Fehlerbehandlung.

Gibt es eine Möglichkeit gleich in der "globalen" Fehlerbehandlung zu landen bei jedem einzelnen except unabhängig von der "Verschachtelung" ?

Die Fehlerbehandlung: Application.OnException:= eAVException;

Danke für die schelle Antwort. :thumb:

mkinzler 5. Jan 2009 19:06

Re: try..except im try..except - Reihenfolge des Aufrufes
 
Lasse den lokalen Block weg. Ab D2009 kann man hierarchische Handler verwenden ( Verschachtelung)

SirThornberry 5. Jan 2009 19:09

Re: try..except im try..except - Reihenfolge des Aufrufes
 
Du könntest Application.OnException selbst aufrufen:
Delphi-Quellcode:
if Assigned(Application.OnException) then
  Application.OnException(...);

haentschman 5. Jan 2009 19:15

Re: try..except im try..except - Reihenfolge des Aufrufes
 
Zitat:

Lasse den lokalen Block weg.
...das geht so einfach nicht. :wink:

- auf der einen Seite brauche ich den in Procedure A weil diese von verschiedenen Stellen aufgerufen wird.
- zum anderen brauche ich den den anderen um die restlichen Anweisungen und blöderweise Procedure A mittendrin.

...ich könnte den den ganzen Block in 2 Blöcke aufsplitten und Procedure A blank stehen lassen.
Delphi-Quellcode:
if Assigned(Application.OnException) then
  Application.OnException(...);
das raise durch den Aufruf ersetzen... ok... gute Idee :thumb:
:gruebel: die 3 Punkte stellen den Procedur Namen meiner Fehlerbehandlung dar ?

Danke an alle...

Die Muhkuh 5. Jan 2009 19:17

Re: try..except im try..except - Reihenfolge des Aufrufes
 
Zitat:

Zitat von mkinzler
Lasse den lokalen Block weg. Ab D2009 kann man hierarchische Handler verwenden ( Verschachtelung)

Laut Profil hat er aber Delphi 2006 ;)

mkinzler 5. Jan 2009 19:20

Re: try..except im try..except - Reihenfolge des Aufrufes
 
Schon klar, war auch nur informativ

haentschman 5. Jan 2009 20:58

Re: try..except im try..except - Reihenfolge des Aufrufes
 
Danke für Eure Hilfen... :thumb:

Durch das rumprobieren habe ich gleich noch einen tollen Effekt herausgefunden. :roll: FastReport -> frReport.LoadFromFile schmeißt bei fehlendem File keine Exception sondern ist nur False. Das heißt, daß ich mir den einen Block sowieso sparen kann und ich bei fehlendem File selbst eine Exception werfen muß.
Delphi-Quellcode:
var E: Exception;
begin
  E:= Exception.Create('Formular ist nicht vorhanden oder beschädigt');
  try
    .
    .
    if not frReport1.LoadFromFile(DBPfad + 'Formulare\21.fr3')then
      begin
        Application.OnException(self,E);
        exit;
      end;
    Formular21;
  finally
    E.Free
  end;

procedure Formular21;
try
  .
except
  FehlerCode:= 'E165';
  Fehlerstatus:= False;
  Fehlertext:= 'Datenaufbereitung Formular 21 fehlgeschlagen. ';
  raise;
end;
also... erledigt aber wieder was gelernt. :thumb:

Danke an alle...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 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