matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabFehlerbehandlung in Matlab
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Informatik • Physik • Technik • Biologie • Chemie
Forum "Matlab" - Fehlerbehandlung in Matlab
Fehlerbehandlung in Matlab < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Fehlerbehandlung in Matlab: input-Befehl i.V.m. try/catch
Status: (Frage) beantwortet Status 
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

        
Bezug
Fehlerbehandlung in Matlab: Antwort
Status: (Antwort) fertig Status 
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.






Bezug
                
Bezug
Fehlerbehandlung in Matlab: Rückfrage
Status: (Frage) reagiert/warte auf Reaktion Status 
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

Bezug
                        
Bezug
Fehlerbehandlung in Matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
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.

Bezug
                                
Bezug
Fehlerbehandlung in Matlab: Vielen Dank
Status: (Mitteilung) Reaktion unnötig Status 
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

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]