Exception Dialog trotz try...excapt
Exception Dialog trotz try...excapt
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???
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???
Re: Exception Dialog trotz try...excapt
Du kannst bei Einstellungen -> Debugger -> Sprach-Ausnahmen den EConvertError hinzufügen.
-
- 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
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.
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
Re: Exception Dialog trotz try...excapt
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?
Wie schalte ich eigentlich den Debugger ganz aus?
Re: Exception Dialog trotz try...excapt
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.
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.
Re: Exception Dialog trotz try...excapt
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).
Re: Exception Dialog trotz try...excapt
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.
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.
-
- 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
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 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).
Re: Exception Dialog trotz try...excapt
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.
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.
-
- 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
Das Format für eine Datums-/Zeitangabe 123456789 kannte ich noch gar nicht. Muss asiatisch sein
http://www.freepascal.org/docs-html/rtl ... etime.html" onclick="window.open(this.href);return false;
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.

http://www.freepascal.org/docs-html/rtl ... etime.html" onclick="window.open(this.href);return false;
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.
Re: Exception Dialog trotz try...excapt
Dachte ich auch. Dann verstehe ich den Sinn dieser Fkt auch nicht.Uli hat geschrieben: Ich dachte bei dieser Funktion würde keine Exception ausgelöst.
Sorry für die Fehlinformation.
-
- Beiträge: 586
- 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
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.
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.
Re: Exception Dialog trotz try...excapt
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.