AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Bubblen Exceptions nach oben durch einen try-finally-Block?
Thema durchsuchen
Ansicht
Themen-Optionen

Bubblen Exceptions nach oben durch einen try-finally-Block?

Ein Thema von DGL-luke · begonnen am 11. Feb 2007 · letzter Beitrag vom 11. Feb 2007
Antwort Antwort
Seite 2 von 3     12 3      
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 22:38
Das finally wird keine Exception schlucken, aber es wird trotzdem ausgeführt.
Aber die große Frage ist, warum du die Exception an der Stelle auf eine so fiese Art schlucken willst?
Solche Art von Code sollte IMHO nur dann Exceptions schlucken, wenn sie recoverable sind, also wenn die App nach Ablauf der Funktion immer noch in einem konsistenten Zustand ist.
Ein Beispiel wäre eine disconnected gracefully mit einem folgendem Reconnect.
Wenn du eine Datei erzeugen willst, dies aber nicht möglich ist, kann sich deine Methode schlecht von dieser Ausnahme erholen. Sie hat also IMHO kein Recht die Ausnahme zu schlucken.
Nur der Code, der die Funktion ausführt, kann das beurteilen.
Und dann vielleicht auch den Benutzer benachrichtigen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 9. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#12

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 22:45
Tja… da hast Du wirklich Recht.

Ich habe nur probiert Dein Konstrukt zu Recht zu biegen.

Es geht dies z.B. auch so wie Dir Luckie jetzt gerade gezeigt hat (Hallo Lucke )

In meinem Konstrukt wollte ich Dich nur auf die wichtigste Tatsache aufmerksam machen, dass man NIE die Routine FREE aufruft ohne vorher den Pointer zu überprüfen, da falls NIL dann hast Du ein echtes Problem.

Gruß

PaulJr.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 22:49
Zitat von PaulJr:
dass man NIE die Routine FREE aufruft ohne vorher den Pointer zu überprüfen, da falls NIL dann hast Du ein echtes Problem.
Nein hat er nicht, da Free vorher auf nil prüft und nur dann den Destruktor aufruft, wenn da Objekt nicht nil ist:
Zitat:
Free automatically calls the destructor if the object reference is not nil. [..] Unlike Destroy, Free is successful even if the object is nil; so if the object was never initialized, Free won’t result in an error.
Zitat von PaulJr:
(Hallo Lucke )
Ähm, ich stehe gerade etwas auf dem Schlauch... Allerdings kommt mir der Nick PaulJr irgendwie bekannt vor.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 9. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#14

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 22:51
Habe natürlich Luckie gemeint. Ja ich bin der "alte" PaulJr.

Gruß

PaulJr.

P.S.

Ich meinte Luckie nicht Deine Routine (die ist OK!)sondern das was er programmiert hatte...
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 22:57
Zitat von PaulJr:
Tja… da hast Du wirklich Recht.
Na das kann ich für Dich nur hoffen.
Zitat:
In meinem Konstrukt wollte ich Dich nur auf die wichtigste Tatsache aufmerksam machen, dass man NIE die Routine FREE aufruft ohne vorher den Pointer zu überprüfen, da falls NIL dann hast Du ein echtes Problem
Stümmt nicht. Das Free kann nur aufgerufen werden, wenn der Konstruktor erfolgreich war.
Es kann also nach der der Erzeugung der Instanz unmöglich mit einer nil-Referenz gearbeitet werden.
Exceptions gehören genauso zur Flusskontrolle wie Schleifen oder if-Statements.

Der Code von Luke wäre IMO in einer simpelsten Form auch am richtigsten:
Delphi-Quellcode:
var
  putNameHere : TSomeClas;
begin
  putNameHere := TSomeClas.Create();
  try
    putNameHere.SomeMethod();
    putNameHere.SomeMethodThatThrows(); //wirft Exception!
  finally
    putNameHere.Free();
  end;
end;
btw: Bist du der PaulJr?
Ahh der rote Katen fehlte, du bist es also. Habe schon einiges von dir gehört. War allerdings bevor ein gewisser Robert_G dieses Forum heimsuchte.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 23:00
Zitat:
Es kann also nach der der Erzeugung der Instanz unmöglich mit einer nil-Referenz gearbeitet werden.
Free ist eine statische Methode, man kann sie sehr wohl aufrufen, auch wenn die Klasse nicht instantiiert ist. Free ist sogar so freundlich, sich selbst abzubrechen, wenn Self=nil. Nur wenn der Instanzenpointer nicht nil ist, krachts.

EDIT:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var a: TObject;
begin
  a:=nil;
  a.Free; //Das kracht nicht
  a.ClassType; //Das schon
end;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#17

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 23:02
Zitat von 3_of_8:
Zitat:
Es kann also nach der der Erzeugung der Instanz unmöglich mit einer nil-Referenz gearbeitet werden.
Free ist eine statische Methode, man kann sie sehr wohl aufrufen, auch wenn die Klasse nicht instantiiert ist. Free ist sogar so freundlich, sich selbst abzubrechen, wenn Self=nil. Nur wenn der Instanzenpointer nicht nil ist, krachts.
Da sagst du mir nix neues. Ändert auch nix an meinem Punkt, oder?
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 9. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#18

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 23:03
Ja Elvis , der bin ich…(bin für ein paar Jahre ausgestiegen… und jetzt bin ich zurück… und offensichtlich sollte ich etwas genauere Antworten geben: Versprochen )

Ja in diesem Fall hast natürlich Recht.

Ich bin alte Programmierer und programmiere immer so… ist aber nicht so weiter wichtig…

Gruß

PaulJr.
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 9. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#19

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 23:04
Var
StringList : TstringList;
Begin
StringList.Free; // da kommt leider Exeption…

Das allerdings geht in die Hosen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo

  Alt 11. Feb 2007, 23:06
Zitat von PaulJr:
Habe natürlich Luckie gemeint. Ja ich bin der "alte" PaulJr.
Herzlich willkommen zurück. Schreib mal eine PN, was du so gemacht hast und wie es dir ergangen ist. Hier hat sich ja viel getan, wie du siehst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 03:25 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