Exception Dialog trotz try...excapt

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Exception Dialog trotz try...excapt

Beitrag von Uli »

Hallo,
bin neu hier und habe ein Problem (was sonst).
Folgender Code zeigt von der Kommandozeile aufgerufen wie erwartet "Error" an aber keinen Laufzeit Fehler.

begin
try
writeln( DateTimeToStr( StrToDateTime( '1234567890' ) ) );
except
writeln('Error');
end;
end.

Wenn ich ihn in der Lazarus IDE starte, erscheint trotz try...except ein Exception Dialog Fenster mit der Meldung "Project raised exception class 'EConvertError'". Kann man dieses Verhalten abstellen, so dass im Programm abgefangene Exceptions nicht angezeigt werden???

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception Dialog trotz try...excapt

Beitrag von theo »

Du kannst bei Einstellungen -> Debugger -> Sprach-Ausnahmen den EConvertError hinzufügen.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Exception Dialog trotz try...excapt

Beitrag von monta »

bzw. kannst du dort auch den Debugger komplett abschalten, wenn du bspw. in der IDe prüfen willst, ob deine Exception kommt.

Wenn du das Programm außerhalb der IDE startest (also ohne Debugger) ist die von dir beschriebene Fehlermeldung ohnehin weg und lediglich dein try-Except-Block sollte greifen.
Johannes

Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Re: Exception Dialog trotz try...excapt

Beitrag von Uli »

Die Exception habe ich einmal ausgeschaltet, dann bekomme ich aber auch keine Meldung mehr wenn diese Exception irgendwo auftritt wo ich sie nicht abgefangen habe. Wenn ich Euch richtig verstehe, muss ich also einen Tod sterben, entweder garkeine Exception Meldung in der IDE oder auch dann Meldungen, wenn die Exception vom Programm abgefangen wird.
Wie schalte ich eigentlich den Debugger ganz aus?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception Dialog trotz try...excapt

Beitrag von theo »

Grundsätzlich würde ich dir empfehlen, nicht mit Exceptions zu "arbeiten". Diese sollten imho nur dann auftauchen, wenn man etwas nicht bedacht hat oder nicht voraussehen konnte. Also nicht im normalen Betrieb.
Es gibt viele entsprechende Funktionen, die keine Exception auslösen. In deinem Fall TryStrToDateTime();

Den Debugger ausschalten kann man in den Debugger Optionen: einfach dort wo GNU debugger (gdb) steht auf none schalten.

Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Re: Exception Dialog trotz try...excapt

Beitrag von Uli »

Vielen Dank Theo, das habe ich nicht gewusst, dass Exceptions am besten nicht benutzt werden sollen. In anderen Programmiersprachen ist es ja eher umgekehr oder wird sogar "erwzungen". Ich finde es aber nicht schlecht, File IO fange ich eh mit ioresult ab und zur Umwandlung Str -> Zahl benutze ich val (wie zu guten alten Turbo Pascal Zeiten).

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception Dialog trotz try...excapt

Beitrag von theo »

Ich meine nicht, dass man potentielle, aber eher seltene Fehlerquellen nicht abfangen soll (Dateihandling etc.)
Nur sollte man sie imho nicht im Normalbetrieb verwenden, also wenn z.B. eine Benutzereingabe validiert werden soll, da gibt es effizientere und kontrollierbarere Wege.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Exception Dialog trotz try...excapt

Beitrag von Hitman »

Uli hat geschrieben:Vielen Dank Theo, das habe ich nicht gewusst, dass Exceptions am besten nicht benutzt werden sollen. In anderen Programmiersprachen ist es ja eher umgekehr oder wird sogar "erwzungen". Ich finde es aber nicht schlecht, File IO fange ich eh mit ioresult ab und zur Umwandlung Str -> Zahl benutze ich val (wie zu guten alten Turbo Pascal Zeiten).


Ehrlich gesagt kenn ich außer Java keine Sprache, die massiv auf Exceptions zur Kommunikation setzt. Sowohl bei C, C++, C#, Perl, Python, Delphi als auch bei Basic arbeitet man primär mit dem Rückgabewert von Funktionen, um deren Erfolg zu "beziffern".

Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Re: Exception Dialog trotz try...excapt

Beitrag von Uli »

Jetzt benutze ich TryStrToDateTime und bekomme "Project raised exception class 'Unknown'".
Ich dachte bei dieser Funktion würde keine Exception ausgelöst.
So sieht das Testprogramm aus und die Meldung wird in der if-Zeile ausgelöst:
program test1;
uses sysutils;
var DT1, DT2 : TDateTime;
begin
writeln('start');
if TryStrToDateTime( '123456789', DT1 ) then begin
DT2 := DT1;
end;
writeln('ende');
readln;
end.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Exception Dialog trotz try...excapt

Beitrag von Scotty »

Das Format für eine Datums-/Zeitangabe 123456789 kannte ich noch gar nicht. Muss asiatisch sein :shock:

http://www.freepascal.org/docs-html/rtl ... etime.html

TryStrToDateTime ist auch per try/except gekapselt, deswegen die Fehlermeldung in der IDE. Zu beachten ist bei solchen Sachen, dass Datums- und Zeitangaben systemspezifisch sind, d.h. unter Windows TT.MM.JJJJ und unter Linux JJJJ-MM-TT oder was auch immer der Benutzer einstellt. Sicherer ist es, intern TDateTime=type double zu benutzen und nur die Ausgaben zu formatieren. Für Eingaben vom Benutzer kann man meistens auf Text respektive TEdit verzichten.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception Dialog trotz try...excapt

Beitrag von theo »

Uli hat geschrieben:Ich dachte bei dieser Funktion würde keine Exception ausgelöst.

Dachte ich auch. Dann verstehe ich den Sinn dieser Fkt auch nicht.
Sorry für die Fehlinformation.

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Exception Dialog trotz try...excapt

Beitrag von martin_frb »

TryStrToDateTime ist nur eine "wrapper" funktion. TryStrToDateTime implementiert den try except block.

Wenn die Anwendung im Debugger läuft, sieht der Debugger die Exception trotzdem. Man kann das Programm aber fortsetzen und alles ist ok.

Außerhalb des Debuggers sollte sich die Exception nicht bemerkbar machen.

Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Re: Exception Dialog trotz try...excapt

Beitrag von Uli »

Intern arbeite ich nur mit TDateTime, aber ich würde schon gerne ohne IDE Fehler Dialog auskommen wenn ich einen String umwandeln muss. Ich arbeite z.Z. eh nur mit dem ISO Format (yyyy-mm-dd hh:mm:ss) und dafür habe ich mir dann eben eine Prüffunktion geschrieben.

Antworten