Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exceptionbehandlung! (https://www.delphipraxis.net/13294-exceptionbehandlung.html)

chris_82 15. Dez 2003 16:51


Exceptionbehandlung!
 
Wie kann ich bei einer Exception "Eirgendwas" auf eine bestimmte Meldung z.b "Meldung:Login" incorrect eine Aktion ausführen und auf die "Meldung: Pfad nicht vorhanden" eine andere?

Matze 15. Dez 2003 16:54

Re: Exceptionbehandlung!
 
Ich verstehe dich nicht, ganz.
Aber wenn du es so meinst, dass wenn eine Exception, z.B. über einen ungültigen Pfad kommt, dann möchtest du was machen.

Das ginge z.B. mit
Delphi-Quellcode:
try
  //Code, der die Exception ausführt
except
  //Code, der daraufhin etwas machen soll

Smokey 15. Dez 2003 17:08

Re: Exceptionbehandlung!
 
Hi !
Wenn du die Exceptionklassen kennst, die ausgelöst werden, kannst du es so machen :

Delphi-Quellcode:
try
   //deine anweisungen
except
   on EIrgendwas do
      begin
         //code für die spezielle Exception
      end;
   on EIrgendwasAnderes do
      begin
         //code für die spezielle Exception
      end;
   else
      begin
        //code für alle anderen Exceptions die nicht
        //speziell behandelt werden
      end;
end;
So kannst du auf die Eigenschaften der Exception zugreifen:
Im Beispiel für jede Art, geht aber natürlich auch wie oben getrennt nach Exception.

Delphi-Quellcode:
try
   //deine anweisungen
except
   on excp: Exception do
      begin
         //zugriff auf exception zB
         showmessage(excp.Message)
      end;
end;
mfg
smk

chris_82 15. Dez 2003 17:16

Re: Exceptionbehandlung!
 
Also ich meine es So Am Bsp. "EIDProtocolReplyError", die tritt z.B. einmal mit der Meldung "Login incorrect" und ein anderes mal mit der Meldung "No such fiel or directory" auf nun will ich bei jeder Meldung einen anderen Messagedialog ausgeben

so in etwa

Delphi-Quellcode:
on EIDProtocolReplyError do
 if Meldung Login incorrect then
  messagedlg(...);
 if Meldung No such file or directory then
  messagedlg(...);

Smokey 15. Dez 2003 17:45

Re: Exceptionbehandlung!
 
jo denn so wie in meinem unteren beispiel.
Zur sicherheit, bevor du die eine Zeile Änderung nich selber hinbekommst :wink:

Delphi-Quellcode:
try
   //deine anweisungen
except
   on excp: EIDProtocolReplyError do
      begin
         if excp.Message = 'Login incorrect' then
            messagedlg(...);
         if excp.Message = 'No such file or directory' then
            messagedlg(...);
      end;
end;

chris_82 15. Dez 2003 17:53

Re: Exceptionbehandlung!
 
Ok, ich dank dir!

Robert_G 15. Dez 2003 20:12

Re: Exceptionbehandlung!
 
Ich habe von Lucky letzte Woche ordentlich Schelte bekommen :stupid: , als ich etwas von exzessivem Exception-handling erwähnt habe.
Er schrieb, dass es mit einem ziemlichen Code & CPU -Overhead endet. Und er hatte natürlich wieder recht :evil:

Nachdem ich mein Projekt von allen Exceptions befreit hatte, die ich nicht auf irgendeine andere Art abfangen konnte, war die exe ein paar KB kleiner und schneller!

Ich habe z.B. eine Prozedur, die die Werte eines Forms mit denen der letzten Speicherung vergleicht und nur bei einem Unterschied die Save-action auf enabled setzt und beim Schließen danach fragt.
Beim SynEdit gab's da an einer Stelle einen Fehler, den bin ich jetzt anders umgangen :arrow: das Ding läuft trotz mehr Code echt schneller...

[Nachtrag]
Schneller ist relativ: ich habe den TimerInterval von 200 auf 1 reduziert - war aber ein guter Weg Luckies Einwände zu bestätigen. Im Normalbetrieb ist der Unnterschied kaum feststellbar, aber verschwendete Taktzyklen sind fast sowas wie verschwendetes Geld.
[/Nachtrag]


Ich nutze Exceptions in Oracle sehr häfig (ist halt hyper-übersichtlich), aber in Delphi gibt's schnell Probleme z.B. werden Objekte im Except-Block nicht freigegeben.

chris_82 15. Dez 2003 20:24

Re: Exceptionbehandlung!
 
Das hört sich ziemlich interessant an! Werd mir deinen beitrag sicher mal anschauen. Danke!

choose 15. Dez 2003 22:33

Re: Exceptionbehandlung!
 
Zitat:

Zitat von Smokey
Delphi-Quellcode:
if excp.Message = 'Login incorrect' then
  messagedlg(...);
if excp.Message = 'No such file or directory' then
  messagedlg(...);

Es sollte niemals gegen den Meldungstext einer Exception geprüft werden. Diese Beschreibungen sind veränderlich und sollten es im Fall internationaler Bibliotheken auch sein!

Stattdessen sind Exceptions idR mithilfe von Unterklassen geordnet oder bieten im Zweifelsfall Eigenschaften wie zB einen Errorcode an...
In dem Artikel Exceptional practices, Part 1-3 beschreibt Brian Goetz verständlich einen gelungenen Einsatz von Exceptions.


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