Re: wie funktioniert try except
Äh, ach ja, da habe ich gar nicht drauf geachtet...
Zitat:
Beispiel:
Delphi-Quellcode:
Es wird nur die Meldung "Fehler" angezeigt, da bei der Exception direkt ins except gesprungen wird und das erste ShowMessage nie erreicht wird.
try
a := a * 5; a := a div 0; // Division durch 0 ShowMessage('Kein Fehler, a = ' + IntToStr(a)); except ShowMessage('Fehler'); end; Heißt: Wenn du Code (wie das erste ShowMessage) nur ausführen kannst, wenn vorher keine Exception aufgetreten ist, gehört das vor das except. Was im Fehlerfalle passieren soll, gehört nach except. Und wenn du stattdessen etwas immer ausführen willst, egal ob ein Fehler aufgetreten ist oder nicht, dann nimm try..finally und schreib es nach das finally, wie eben Muetze1 geschrieben hat. Auch da wird direkt zum finally bei einer Exception gesprungen. |
Re: wie funktioniert try except
Ich muß dem Originalposter recht geben. Try-Except scheint irgendwie nicht zu funktionieren. Ich habe das jedenfalls bis heute nicht gerafft, wie das funktionieren soll, und habe auch noch nie selbständig eine solche Befehlssequenz in ein Programm einarbeiten können. Nur mal zwei Beispiele:
Delphi-Quellcode:
ergibt die Meldung "Kein Fehler", also wird der except-Teil nicht angesprungen (obwohl eine Division durch 0 angefordert wird, also in meinen Augen ein völlig absurdes Programmverhalten), bei
var a,b:integer;
begin b:=0; try a:=a div b; ShowMessage('Kein Fehler') except ShowMessage('Fehler') end end
Delphi-Quellcode:
wird das Programm mit einem Laufzeitfehler (wohl "heftiger" als eine Exception?) beendet, besser formuliert: abgebrochen.
var c:real;
begin try c:=c/0; ShowMessage('Kein Fehler') except ShowMessage('Fehler') end end Fazit: Dieses Sprachkonstrukt ist für mich bis heute (von kopierten Codeschnipseln einmal abgesehen) wertlos. |
Re: wie funktioniert try except
Zitat:
Und bei deinem zweiten Quelltext sollte wenn, dann nur in Delphi eine Meldung angezeigt werden, aber nicht, wenn das Programm eigenständig läuft oder die Anzeige in Delphi deaktiviert ist. (Aber eigentlich sollte das auch wegoptimiert werden und nix angezeigt werden von einem Fehler. |
Re: wie funktioniert try except
Stimmt, ein einfaches ShowMessage dazwischen und die Sache stellt sich schon anders dar.
Delphi-Quellcode:
var a,b:integer;
begin b := 0; try a := 1 div b; ShowMessage(inttostr(a)); //Hier wird auf a zugegriffen, daher keine Optimierung ShowMessage('Kein Fehler') except ShowMessage('Fehler') end; end; |
Re: wie funktioniert try except
Zitat:
Also ich habe es gerade einmal ausprobiert. Bei mir wird auch die Zeile in deinem zweiten Beispiel (wie erwartet) wegoptimiert und es kommt die Meldung "Kein Fehler". Hast du noch irgendeine uralte Version oder so? Dann müsste ich das da einmal ausprobieren. |
Re: wie funktioniert try except
Wieder was dazugelernt, vielen Dank!
Wußte gar nicht, daß Delphi derart intelligent mit dem Quelltext umgeht. Klar, die Meldung beim Compilieren kommt. Nun, nachdem ich die Variable a irgendeiner Verwendung zuführte, kam aber auch keine Exception, sondern das von der Division durch Null bekannte Abbruchverhalten. Zitat:
Zitat:
Danke für Dein Bemühen, aber try-except hat bei mir leider immer noch die Reputation "unbrauchbar". Schade... Ich benutze standardmäßig Delphi 3. Kann es sein, daß bei dieser aus heutiger Sicht inzwischen noch recht frühen Delphi-Version das noch nicht richtig implemmentiert wurde? Kann ich mir kaum vorstellen, denn ich habe die fehlerbereinigte, nachgeschonbene 3.01-Version. Gruß Delphi-Laie |
Re: wie funktioniert try except
Hast du SysUtils eingebunden? Ohne SysUtils gibt es keine Exceptions.
|
Re: wie funktioniert try except
Zitat:
|
Re: wie funktioniert try except
Das kommt davon, wenn man alles ignoriert und nur guckt, dass es läuft. Egal wie. 8)
Keiner hat das zur Kenntnis genommen : Zitat:
Delphi-Quellcode:
Leute, die so was permanent ignorieren, denen sollte der Delphi-Compiler besser die Arbeit verweigern, anstatt das selbst auch noch zu ignorieren. :mrgreen: Für Testzwecke ist das vielleicht noch hinzunehmen, irgendwelche überflüssigen Variablen zu haben, aber der Normalfall sollte das nicht sein.
procedure TForm1.FormCreate(Sender: TObject);
var a,b:integer; begin b := 0; try a := 1 div 0; (* ShowMessage(inttostr(a)); //Hier wird auf a zugegriffen, daher keine Optimierung ShowMessage(inttostr(b)+' Kein Fehler') *) except ShowMessage('Fehler') end; end; Das hier z.B. wird NICHT compiliert :
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var a,b:integer; begin b := 0; try a := 1 div 0; Zitat:
Zugriff auf a oder b geschieht auch hier nicht :
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var a,b:integer; begin b := 0; try a := 1 div 0; (* ShowMessage(inttostr(a)); //Hier wird auf a zugegriffen, daher keine Optimierung ShowMessage(inttostr(a)+' Kein Fehler') *) except ShowMessage('Fehler') end; end; |
Re: wie funktioniert try except
Zitat:
Da war ja alles noch extrem unkomfortabel, ich frage mich da immer, wieso damit heute noch ernsthaft jemand arbeitet... Masochist? :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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