Fehlerbehandlung in Matlab < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 00:14 So 20.11.2016 | Autor: | Marcel08 |
Hallo zusammen,
ich beschäftige mich gerade mit Fehlerbehandlungen in Matlab. Mein Anliegen würde ich gerne mit Hilfe des folgenden Codes schildern.
ok = 0;
while ok == 0
try
x = input('Eingabe: '); % Wenn hier ein Buchstabe eingegeben wird ...
if (x >= 0 && x <=1)
disp('Sie haben eine gültige Zahl eingegeben! Ende des Programms!')
ok = 1;
else
disp('Sie haben keine gültige Zahl eingegeben!')
end
catch
disp('Ungültige Eingabe!') % ... soll im Idealfall diese Fehlermeldung ausgegeben werden. Stattdessen erfolgt überhaupt keine Meldung.
end
end
Eine kurze Beschreibung des Codes:
Der Benutzer soll eine Zahl eingeben und diese Zahl soll innerhalb eines bestimmten Bereiches liegen (hier exemplarisch zwischen 0 und 1). Gibt der Benutzer eine gültige Zahl ein (bspw. eine 1) so soll ein Hinweis auf eine gültige Eingabe erfolgen und das Programm beendet werden.
Bei einer Eingabe die zwar einer Zahl entspricht, nicht jedoch im gültigen Bereich liegt, soll der Benutzer nach einer entsprechenden Fehlermeldung zur erneuten Eingabe aufgefordert werden. Der Benutzer soll solange erneut zur Eingabe aufgefordert werden, bis eine gültige Zahl eingegeben wird.
Das Problem:
Die try/catch-Anweisung fängt jede denkbare Fehleingabe (Leereingabe, Sonderzeichen, etc.) unter Angabe einer hilfreichen Fehlermeldung korrekt ab. Nur bei der Eingabe von Buchstaben gibt es ein Problem. Hier wird der Benutzer ohne Fehlermeldung sofort zur erneuten Eingabe aufgefordert. Es wird weder der catch-Block aufgegriffen noch die anschließende if-Anweisung durchlaufen.
Verwende ich den input-Befehl ohne try/catch-Block und ohne while-Schleife, wird der Benutzer ebenfalls zur erneuten Eingabe aufgefordert, nachdem eine matlabspezifische Fehlermeldung ausgegeben wurde. D.h. bei Eingabe einer Zahl über die input-Anweisung erfolgt eine Fehlermeldung, das Programm wird aber durch den auftretenden Fehler nicht beendet.
Meine Frage:
Wie kann ich einfach und robust (möglichst ohne reguläre Ausdrücke o.ä.) alle denkbaren Fehleingaben inkl. Buchstaben unter Ausgabe einer passenden Fehlermeldung abfangen bzw. wie kann ich den Code so modifizieren, dass auch bei der Eingabe von Buchstaben eine passende Fehlermeldung geworfen wird?
Vielen Dank im Voraus an alle Interessierten und viele Grüße
Marcel
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 09:26 So 20.11.2016 | Autor: | chrisno |
Hallo,
obwohl ich matlab nicht kenne, traue ich mir eine Antwort zu.
catch soll eine Fehlerausgabe von Matlab durch deine eigene ersetzen.
Nun vermute ich, dass input sowohl auch Buchstaben (Variablen?) annimmt. Dann hat Matlab nichts zu meckern, es gibt also keinen Grund catch auszuführen.
Mein Lösungsvorschlag ist nicht elegant:
Füge im try Block noch ein letztes else ein, das die gleiche Reaktion wie das catch ("ungülige Eingabe") zur Folge hat.
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 15:21 So 20.11.2016 | Autor: | Marcel08 |
Hallo!
Zunächst mal vielen Dank für deine Antwort.
> Hallo,
> obwohl ich matlab nicht kenne, traue ich mir eine Antwort
> zu.
>
> catch soll eine Fehlerausgabe von Matlab durch deine eigene
> ersetzen.
Richtig. Der Benutzer soll bei der Eingabe von Buchstaben darüber informiert werden, dass nur Zahlen eingegeben werden dürfen, die zudem in einem bestimmten Bereich liegen müssen. Mit der Fehlermeldung an sich soll dann eine erneute Eingabeaufforderung einhergehen.
> Nun vermute ich, dass input sowohl auch Buchstaben
> (Variablen?) annimmt. Dann hat Matlab nichts zu meckern, es
> gibt also keinen Grund catch auszuführen.
Nein, genau das ist ja der Punkt. Der input-Befehl nimmt keine Buchstaben an. Wenn ich ohne try/catch-Block über den input-Befehl einen Buchstaben eingebe, wirft Matlab eine Fehlermeldung. Das Programm wird aber durch diesen Fehler nicht beendet sondern es kommt direkt zu einer erneuten Eingabeaufforderung. --> Es kommt zwar zu einer Fehlermeldung, die den Benutzer aber nicht konkret darüber informiert, dass keine Buchstaben eingegeben werden dürfen.
Führe ich den input-Befehl in einem try/catch-Block aus und gebe ich einen Buchstaben ein, wird keine Fehlermeldung geworfen. Es kommt dann direkt zur erneuten Eingabeaufforderung. --> Hier wird die Fehlermeldung unterdrückt, sodass der Benutzer nach der Eingabe eines Buchstabens gar nicht weiß, warum es im Programm nicht weiter geht.
Daher nochmal meine Frage: Wie kann ich für den Fall, in dem der Benutzer einen Buchstaben eingibt, sicherstellen, dass eine individuell definierbare Fehlermeldung geworfen wird? Der Benutzer soll konkret darüber informiert werden, dass keine Buchstaben eingegeben werden dürfen.
> Mein Lösungsvorschlag ist nicht elegant:
> Füge im try Block noch ein letztes else ein, das die
> gleiche Reaktion wie das catch ("ungülige Eingabe") zur
> Folge hat.
Dieser Vorschlag bleibt leider wirkungslos. Gibt der Benutzer über den input-Befehl einen Buchstaben ein, wird im try/catch-Block zwar scheinbar der Fehler aufgefangen, aber nicht die selbstdefinierte Fehlermeldung geworfen; das ist alles sehr merkwürdig. Der gesamte if-Block scheint dagegen vollständig unberührt zu sein.
Nochmals vielen Dank und viele Grüße
Marcel
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:06 So 20.11.2016 | Autor: | chrisno |
http://stackoverflow.com/questions/11391776/matlab-try-and-catch-issue
Das Problem liest sich ähnlich und insbesondere die Antwort könnte etwas für Dich sein.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:22 Mo 21.11.2016 | Autor: | Marcel08 |
Hallo!
> http://stackoverflow.com/questions/11391776/matlab-try-and-catch-issue
>
> Das Problem liest sich ähnlich und insbesondere die
> Antwort könnte etwas für Dich sein.
Super, damit konnte ich das Problem tatsächlich lösen. Vielen Dank für diese sehr zielführende Recherche.
Viele Grüße
Marcel
|
|
|
|