Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exceptions von weit weg abfangen (https://www.delphipraxis.net/63726-exceptions-von-weit-weg-abfangen.html)

JPSelter 22. Feb 2006 08:53


Exceptions von weit weg abfangen
 
Folgendes Szenario:

Code:
procedure first;
begin
  try
    second;
  except
    dosomethingaboutit;
  end;
end;

procedure second;
begin
  dosomethingthatmightcauseanexception;
end;
Die Prozedur "second" stammt aus einer anderen Unit an der ich nichts verändern möchte. Gleichzeitig besteht aber die Gefahr, dass genau dort eine Exception geworfen wird. Die möchte ich aber abfangen, also dachte ich mir, dass die aufrufende Prozedur "first" dies tun könnte. Macht sie aber nicht. Das was ich dort in die except-Klausel schreibe, wird einfach ignoriert. Wie kann ich das lösen?

SirThornberry 22. Feb 2006 09:20

Re: Exceptions von weit weg abfangen
 
das in deinem Except wird nur ignoriert wenn kein Fehler ausgelöst wird. Woher bist du dir so sicher das der Except-Block nie ausgeführt wird? (haltepunkte etc. gesetzt?)

MaBuSE 22. Feb 2006 09:36

Re: Exceptions von weit weg abfangen
 
Code:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Dialogs;

procedure second;
begin
  case Round(Random) of
    0: StrToInt('Zwei');       // EConvertError
    1: TObject(nil).Destroy;   // Allgemeine Schutzverletzung
  end;
end;

procedure first;
begin
  try
    second;
  except
    ShowMessage('Es ist ein Fehler aufgetreten.');
  end;
end;

begin
  Randomize;
  first;
end.
Zitat:

Zitat von JPSelter
Die Prozedur "second" stammt aus einer anderen Unit an der ich nichts verändern möchte. Gleichzeitig besteht aber die Gefahr, dass genau dort eine Exception geworfen wird. Die möchte ich aber abfangen, also dachte ich mir, dass die aufrufende Prozedur "first" dies tun könnte. Macht sie aber nicht. Das was ich dort in die except-Klausel schreibe, wird einfach ignoriert. Wie kann ich das lösen?

Das sollte auf jeden Fall funktionieren!!!
Die Unit SysUtils sollte aber eingebunden werden, sonst kann es bei Fehlern statt Exceptions auch RuntimeErrors geben. Die dann das Programm direkt beenden.

JPSelter 22. Feb 2006 10:48

Re: Exceptions von weit weg abfangen
 
Zitat:

Zitat von SirThornberry
das in deinem Except wird nur ignoriert wenn kein Fehler ausgelöst wird. Woher bist du dir so sicher das der Except-Block nie ausgeführt wird? (haltepunkte etc. gesetzt?)

Erstens weil ich Exceptions bekomme und zweitens weil ich dort ein showmessage() drin habe. Hintergrund: Ich scanne einen Datenträger nach ZIP Dateien und liste mir den Inhalt auf. Einige ZIP Dateien sind aber nicht lesbar (liegt an den Units die ich verwende) und werfen eine Exception. Diese Anzahl möchte ich mitzählen, aber das geht nicht, weil er in den except-Block nicht reinspringt.

MaBuSE 22. Feb 2006 10:51

Re: Exceptions von weit weg abfangen
 
Zitat:

Zitat von JPSelter
Erstens weil ich Exceptions bekomme und zweitens weil ich dort ein showmessage() drin habe.

Welche Exception bekommst du denn?

JPSelter 22. Feb 2006 11:09

Re: Exceptions von weit weg abfangen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe keine Zeit um nach dem Grund für diese Exception zu suchen, daher zähle ich nur die fehlerhaften ZIPs mit und ignoriere sie.

Im Anhang eine von zwei bisher festgestellten Exceptions:

dahead 22. Feb 2006 11:25

Re: Exceptions von weit weg abfangen
 
Sieht eher so aus als liegt das Problem an einer Datei, die evtl. kein gültiges Datum für FileAge / DateTimeToStr besitzt.
Ich würde an dieser Stelle evtl. mal einen try except block verwenden.

JPSelter 22. Feb 2006 11:32

Re: Exceptions von weit weg abfangen
 
Eben genau darum geht es ja. Ich kenne die Zeile, die den Fehler verursacht, aber ich möchte in dieser Unit nichts verändern, weil es nicht meine Unit ist. Sicher kann ich da einen try-Block einfügen, aber dann bräuchte ich diesen Thread nicht erstellen.

dahead 22. Feb 2006 11:38

Re: Exceptions von weit weg abfangen
 
Zitat:

Zitat von JPSelter
Eben genau darum geht es ja. Ich kenne die Zeile, die den Fehler verursacht, aber ich möchte in dieser Unit nichts verändern, weil es nicht meine Unit ist. Sicher kann ich da einen try-Block einfügen, aber dann bräuchte ich diesen Thread nicht erstellen.

Ok, tut mir leid, da hätte ich genauer lesen sollen. Du hast ja oben schon geschrieben, dass du in der Unit (second) nichts ändern willst. Allerdings frage ich mich, warum dein try except Block in _deiner_ unit nicht greift?

dfried 22. Feb 2006 11:42

Re: Exceptions von weit weg abfangen
 
Hast du die Anwendung mal "ausserhalb" von Delphi gestartet? Kommt die Fehlermeldung dann auch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
Seite 1 von 2  1 2      

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