![]() |
try...except - Manuell in except springen
Hi,
ich habe einen try...except Block und würde gerne bei Misslingen einer bestimmten Abfrage in den Exception-Block springen. Wie kann ich das anstellen? Sicher geht auch die Variante auch mit mehreren if-Abfragen, aber dieser Weg würde mich mal interessieren. |
Re: try...except - Manuell in except springen
Wie wäre es den das du eine Exception raised.
Delphi-Quellcode:
raise MyException.Create('BlaBla');
|
Re: try...except - Manuell in except springen
Meinst du Abort?!
|
Re: try...except - Manuell in except springen
Entweder du wirfst selbst eine Exception (z.B. EAbort), oder du verweist im Except auf eine Subroutine, die du dann aufrufst. Ich würde letzteres bevorzugen, weil es nicht so unperformant wie eine Exception ist.
|
Re: try...except - Manuell in except springen
Mhmm, also ich weiss noch nicht so recht, wie ich das anstellen soll. Hier mal mit Codeausschnitt:
Delphi-Quellcode:
try
if Form1.Label1.Caption <> 'Administrator' then // Exception werfen // Hier erfolgt die eigentliche Verarbeitung, weswegen ich zur try...except // gegriffen habe except ShowMessage('Vorgang nicht erfolgreich'); end; |
Re: try...except - Manuell in except springen
Wenn es nichts komplexeres gibt, kannst du doch auf den ganzen Try-except-Block verzichten, oder?
Delphi-Quellcode:
Wenn die Exception auftritt, führt er den "weiterern Code" logischerweise nicht aus ...
If Form1.Label1.Caption <> 'Administrator' then
raise Exception.Create('Fehler'); // Weiterer Code |
Re: try...except - Manuell in except springen
Delphi-Quellcode:
procedure ShowError;
begin ShowMessage('Vorgang nicht erfolgreich'); end; ... try if Form1.Label1.Caption <> 'Administrator' then begin ShowError; exit; //oder alternativ in einem else-Zweig weitermachen end; except ShowError; end; |
Re: try...except - Manuell in except springen
Genau so meinte ich das, Detlef.
|
Re: try...except - Manuell in except springen
Ich auch, Exceptions in einem try-Block auszulösen ist eine Lösung, die sich für mich "nicht richtig anfühlt" :mrgreen:
|
Re: try...except - Manuell in except springen
Zitat:
|
Re: try...except - Manuell in except springen
[OT] Ich habe zu Hause ein Buch zu Java, wo in einem Beispiel eine Datei folgendermaßen eingelesen wird (liebe Kinder, bitte nicht nachmachen):
- Datei öffnen - try - in einer Endlosschleife Zeile einlesen - except - Dateiende erreicht Was soll man dazu noch sagen? [/OT] |
Re: try...except - Manuell in except springen
Ich habe irgendwo auch einen Delphi-Text gesehen, der eine Schleifen-Steuerung programmiert hat. So was als dreckig zu bezeichen, wäre aber stark untertrieben.
|
Re: try...except - Manuell in except springen
Zitat:
|
Re: try...except - Manuell in except springen
Wie wär's mit einem GoTo, das ein globales :Label (nicht TLabel!) anspringt?
Delphi kann das :mrgreen: |
Re: try...except - Manuell in except springen
Zitat:
|
Re: try...except - Manuell in except springen
Ich bin mir nicht sicher, ob der Kommentar auch richtig verstanden wurde :gruebel:
|
Re: try...except - Manuell in except springen
Meine Güte, jetzt wird hier wieder so ein Aufriss gemacht. Das war nicht meine Intention.
Ich habe mich persönlich über den Kommentar gefreut, weil er zeigt, dass hier wiedermal (wie so oft und im Prinzip immer) kein exit nötig ist. Das Problem kann strukturiert gelöst werden, es ist kein Sprung nötig. Mehr war nicht und ich wollte hier nicht vom eigentlichen Problem ablenken. |
Re: try...except - Manuell in except springen
Zitat:
Man sucht in ein paar Milliarden Datensätzen einen bestimmten. Der Gesuchte ist Nummer Zwei. Was soll's, einfach bis zum Ende durchlaufen lassen ohne exit... :wiejetzt: |
Re: try...except - Manuell in except springen
Schade, das du nicht verstanden hast worum es ging.
|
Re: try...except - Manuell in except springen
Yheeky wollte einfach wissen, wie man eine Exception wirft. Und nicht, ob und warum eine Exception langsamer ist als andere Möglichkeiten. Er hat ein Beispiel dafür aufgeschrieben und man könnte ihm jetzt mal die Lösung zeigen. Denn wir ihr wisst, ist es nicht immer möglich nur mit Ifs zu arbeiten.
Delphi-Quellcode:
Hier wäre jetzt noch ein Hinweis angebracht, dass das Auslösen einer Exception eine Weile dauert (aber auch nicht ewig lange).
try
if Form1.Label1.Caption <> 'Administrator' then raise Exception.Create('Du bist kein Administrator'); //du kannst/solltest dir auch eine eigene Exceptionklasse von Exception ableiten except on E:Exception do ShowMessage(e.message); end; |
Re: try...except - Manuell in except springen
Warum eigentlich try...except hier?
Delphi-Quellcode:
Fände ich sinnvoller.
if Form1.Label1.Caption <> 'Administrator' then
begin try // Code ausführen, der try...except braucht. except // Mach hier auch irgendwas end; end else ShowMessage('Fehler!'); |
Re: try...except - Manuell in except springen
@sirius: Genau das wollte ich wissen. Danke!! :-)
|
Re: try...except - Manuell in except springen
Zitat:
Es ist nicht Sinn von Exception, vorhersehbare Fehler abzufangen, sondern wenn ein Programmteil nicht funktioniert (hier wegen mangenlden Rechten), eben einfach eine Exception auszulösen. Es ist an der aufrufenden Stelle dann dafür zu sorgen, wie die Exception interpretiert werden soll. Und wenn eine eigene Exception Klasse definiert wird, ist es auch gleich klar für den Aufrufer, was schief gelaufen ist. |
Re: try...except - Manuell in except springen
Wäre es da nicht gleich sinnvoller zu überprüfen, ob das eigene Programm Adminrechte hat und wenn nicht, gleich einen Hinweis einzublenden und den entsprechenden Button zu deaktivieren?
Wobei es hier, so glaube ich, auch nicht um den richtigen Administrator geht, sondern nur um einen Status in seiner Software. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz