![]() |
try..except im try..except - Reihenfolge des Aufrufes
Guten Abend alle miteinander... :P
folgende Konstellation:
Delphi-Quellcode:
- Procedure A wird in einem try/except Block ausgeführt.
try
. . A; . . except CodeA; end; procedure A; begin try . . except CodeB end; end; - 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: |
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:
|
Re: try..except im try..except - Reihenfolge des Aufrufes
Zitat:
- 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: |
Re: try..except im try..except - Reihenfolge des Aufrufes
Lasse den lokalen Block weg. Ab D2009 kann man hierarchische Handler verwenden ( Verschachtelung)
|
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(...); |
Re: try..except im try..except - Reihenfolge des Aufrufes
Zitat:
- 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:
das raise durch den Aufruf ersetzen... ok... gute Idee :thumb:
if Assigned(Application.OnException) then
Application.OnException(...); :gruebel: die 3 Punkte stellen den Procedur Namen meiner Fehlerbehandlung dar ? Danke an alle... |
Re: try..except im try..except - Reihenfolge des Aufrufes
Zitat:
|
Re: try..except im try..except - Reihenfolge des Aufrufes
Schon klar, war auch nur informativ
|
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:
also... erledigt aber wieder was gelernt. :thumb:
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; Danke an alle... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
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 by Thomas Breitkreuz