AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

wie funktioniert try except

Ein Thema von daNiii · begonnen am 30. Mai 2009 · letzter Beitrag vom 30. Mai 2009
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: wie funktioniert try except

  Alt 30. Mai 2009, 17:51
Äh, ach ja, da habe ich gar nicht drauf geachtet...
Zitat von daNiii:
Ich habe ein großes Problem mit try except. Laut meinen Recherchen müsste das Programm versuchen, den Programmcode zwischen try und except durchzulaufen. Ergibt sich in diesem Bereich ein Problem, so überspringt das Programm und läuft nach except weiter.
Nein, es wird der Code zwischen try und except ausgeführt. Sobald da eine Exception auftaucht, wird zum except gesprungen und der Code zwischen except und end ausgeführt, tritt keine Exception auf, wird der gesamte Code zwischen try und except ausgeführt und dann danach weitergemacht.

Beispiel:
Delphi-Quellcode:
try
  a := a * 5;
  a := a div 0; // Division durch 0
  ShowMessage('Kein Fehler, a = ' + IntToStr(a));
except
  ShowMessage('Fehler');
end;
Es wird nur die Meldung "Fehler" angezeigt, da bei der Exception direkt ins except gesprungen wird und das erste ShowMessage nie erreicht wird.

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#12

Re: wie funktioniert try except

  Alt 30. Mai 2009, 18:52
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:
var a,b:integer;
begin
b:=0;
  try
  a:=a div b;
  ShowMessage('Kein Fehler')
  except
  ShowMessage('Fehler')
  end
end
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

Delphi-Quellcode:
var c:real;
begin
  try
  c:=c/0;
  ShowMessage('Kein Fehler')
  except
  ShowMessage('Fehler')
  end
end
wird das Programm mit einem Laufzeitfehler (wohl "heftiger" als eine Exception?) beendet, besser formuliert: abgebrochen.

Fazit: Dieses Sprachkonstrukt ist für mich bis heute (von kopierten Codeschnipseln einmal abgesehen) wertlos.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: wie funktioniert try except

  Alt 30. Mai 2009, 18:58
Zitat von Delphi-Laie:
Delphi-Quellcode:
var a,b:integer;
begin
b:=0;
  try
  a:=a div b;
  ShowMessage('Kein Fehler')
  except
  ShowMessage('Fehler')
  end
end
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)
Ja, ist auch klar. Da du a nie benutzt, wird die Zeile schlicht wegoptimiert, die existiert in der Exe nicht mehr. Da sollte aber auch eine entsprechende Compilermeldung kommen, dass das nie benutzt wird...

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: wie funktioniert try except

  Alt 30. Mai 2009, 19:09
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: wie funktioniert try except

  Alt 30. Mai 2009, 19:12
Zitat von Delphi-Laie:
wird das Programm mit einem Laufzeitfehler (wohl "heftiger" als eine Exception?) beendet, besser formuliert: abgebrochen.
Was für eine Delphiversion benutzt du denn?

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#16

Re: wie funktioniert try except

  Alt 30. Mai 2009, 19:23
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 von jaenicke:
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.
Tut es aber leider doch, nämlich einfach abzubrechen.

Zitat von jaenicke:
(Aber eigentlich sollte das auch wegoptimiert werden und nix angezeigt werden von einem Fehler.
Wiederum: Tut es aber leider doch, nämlich einfach abzubrechen.

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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: wie funktioniert try except

  Alt 30. Mai 2009, 19:28
Hast du SysUtils eingebunden? Ohne SysUtils gibt es keine Exceptions.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#18

Re: wie funktioniert try except

  Alt 30. Mai 2009, 19:31
Zitat von Apollonius:
Hast du SysUtils eingebunden? Ohne SysUtils gibt es keine Exceptions.
Ja, ist auch in Delphi 3 schon standardmäßig, beim Start, für das leere Formular enthalten.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#19

Re: wie funktioniert try except

  Alt 30. Mai 2009, 19:35
Das kommt davon, wenn man alles ignoriert und nur guckt, dass es läuft. Egal wie. 8)

Keiner hat das zur Kenntnis genommen :

Zitat:
[Hinweis] Unit1.pas(30): Auf 'a' zugewiesener Wert wird niemals benutzt
[Hinweis] Unit1.pas(28): Auf 'b' zugewiesener Wert wird niemals benutzt
stammt von hier :

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(b)+' Kein Fehler')
*)

  except
    ShowMessage('Fehler')
  end;
end;
Leute, die so was permanent ignorieren, denen sollte der Delphi-Compiler besser die Arbeit verweigern, anstatt das selbst auch noch zu ignorieren. Für Testzwecke ist das vielleicht noch hinzunehmen, irgendwelche überflüssigen Variablen zu haben, aber der Normalfall sollte das nicht sein.

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:
[Fehler] Unit1.pas(30): Division durch Null
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Edit :

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;
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: wie funktioniert try except

  Alt 30. Mai 2009, 19:43
Zitat von Delphi-Laie:
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.
Trotzdem ist Delphi 3 mittlerweile 12 Jahre alt, was erwartest du da?
Da war ja alles noch extrem unkomfortabel, ich frage mich da immer, wieso damit heute noch ernsthaft jemand arbeitet... Masochist?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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