Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception abfragen mit "on E : Exception do ..." (https://www.delphipraxis.net/154743-exception-abfragen-mit-e-exception-do.html)

moelski 23. Sep 2010 10:16

Delphi-Version: 2009

Exception abfragen mit "on E : Exception do ..."
 
Moin !

Ich plage mich seit geraumer Zeit mit einem Connection Problem bei TIdImap4. Und Eurekalog schmeißt mir diesen Fehler raus:
Zitat:

2.5 Type : EIdConnectionStateError
2.6 Message : Unable to execute command, wrong connection state;Current connection state: Non Authenticated.
Nun habe ich diesen Code für den Connect:
Delphi-Quellcode:
    try
      ConnState := TheImap.Connect(True);
    except
      on E : Exception do
        begin
          SiMain.LogFatal('Connect : Exception class name = '+E.ClassName);
          SiMain.LogFatal('Connect : Exception message = '+E.Message);
        end;
    end;
Nur leider kriege ich nie Logeinträge für die Exception.

Drum mal die allgemeine Frage ..
Muss ich dort explizit auf EIdConnectionStateError abfragen?
Ich hätte jetzt vermutet da EIdConnectionStateError letztlich von Exception abgeleitet ist, dass das auch so funzt. Tut´s aber nicht. Nur warum !?

himitsu 23. Sep 2010 10:25

AW: Exception abfragen mit "on E : Exception do ..."
 
EIdConnectionStateError sollte (hoffentlich) irgendwo die Exception-Klasse als Vorfahren haben.

Und diese On-Statemenst sollten alles abfangen, welches entweder der angegebenen Klasse entspricht oder diese als Vorfahren hat.


Also eigentlich sollte es funktionieren.


Was passiert denn hier?
Delphi-Quellcode:
try
  ConnState := TheImap.Connect(True);
except
  SiMain.LogFatal('Connect : Exception class name = ' + ExceptObject.ClassName);
  if ExceptObj is Exception then
    SiMain.LogFatal('Connect : Exception message = '+ Exception(ExceptObject).Message);
end;
Aber über
Delphi-Quellcode:
on E: Exception do
wäre der bessere Weg.

moelski 23. Sep 2010 10:29

AW: Exception abfragen mit "on E : Exception do ..."
 
Ich nehme alles zurück.

Die Exception stammt vom nächsten Befehl ListMailBoxes :oops:

Kein Wunder das der Exception Block dann nicht greift.
Aber es bestätigt dann doch meine Vermutung :)

himitsu 23. Sep 2010 10:38

AW: Exception abfragen mit "on E : Exception do ..."
 
Willst du die Exception eigentlich nur Loggen und sie dann dem User vorenthalten?

Wenn nicht, dann reich sie am Ende einfach weiter
Delphi-Quellcode:
try
  ConnState := TheImap.Connect(True);
except
  on E : Exception do
    begin
      SiMain.LogFatal('Connect : Exception class name = ' + E.ClassName);
      SiMain.LogFatal('Connect : Exception message = ' + E.Message);
      Raise;
    end;
  else
    Raise;
end;
oder gibt den User eine passende Meldung.

Ich weiß ja nicht wie dein Log aufgebaut ist, aber eventuell macht sich ein zusammenhängender Eintrag übersichtlicher
Delphi-Quellcode:
try
  ConnState := TheImap.Connect(True);
except
  on E : Exception do
    begin
      SiMain.LogFatal('Connect : ' + E.ClassName + ' message = ' + E.Message);
      ShowException(E, ExceptAddr);
    end;
  else
    Raise;
end;

moelski 23. Sep 2010 10:58

AW: Exception abfragen mit "on E : Exception do ..."
 
Es geht mir nur ums Loggen.
Dem User kann das egal sein. Ist eh keine bediente Anwendung.

Zitat:

Ich weiß ja nicht wie dein Log aufgebaut ist, aber eventuell macht sich ein zusammenhängender Eintrag übersichtlicher
Das wird in der SmartInspect Konsole in einer Liste aufbereitet. Das passt schon so :)


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