2010-08-04 1 views
12

Wie man eine matlab m-Datei (NICHT das Matlab selbst) beendet, wenn der Benutzer schlechte Eingaben eingibt? Ich weiß, wenn eine m-Datei zur Laufzeit falsch läuft, können wir Strg-C drücken, um sie zu stoppen. aber ich brauche einen Befehl, um es in meine m-Datei zu tun, wenn etwas Schlimmes passiert.Wie beende ich eine matlab m-Datei (NICHT das Matlab selbst) wenn der Benutzer schlechte Eingaben eingibt?

Bitte schlagen Sie nicht 'exit' oder 'quit' Befehle vor, da sie das gesamte Matlab beenden und ich will es nicht.

Antwort

6

Sie können einfach einen Fehler Befehl wie Fehler ('schlechte Benutzereingabe') und es sollte das Skript zu stoppen.

Edit: alternativ könnten Sie Ihren Code einfach umgestalten, um nicht zu laufen, es sei denn, Sie setzen das Eingabeflag, um wahr zu sein. So etwas wie

inp = input('>', s) 

if validateInput(inp) 
    %do you stuff here or call your main function 
else 
    fprintf('Invalid input') 
end 
+0

Wenn es mehrere Orte, wo eine Funktion verlassen muss, führt diese Lösung zu einem Baum des Laufes es oder nicht Art von wenn Aussagen. Unpraktisch. – Argyll

13

Ich bin nicht sicher, wie definieren Sie „exit“, aber error scheint die Funktion, die Sie brauchen.

+0

Obwohl gültig und einfach, ist 'Fehler' mit einem einzigen Argument nicht das beste. Es verhindert, dass Dinge wie "lasterror" vollständig funktionieren. Darüber hinaus werden Sonderzeichen wie "\ n" in dem Argument nicht konvertiert. – horchler

+0

Ich nehme an, dass Sie vorschlagen, den MSGID-Parameter zu verwenden, obwohl ich nicht sicher bin, wie Sie das tatsächlich extrahieren. Ich bemerke, dass es sogar im Jahr 2017a erfordert, dass diese Parameter Zeichenfelder sind, keine Strings ... Mann, ich hasse Matlab. – ensignr

7

Hey, ich nehme an, Sie könnten eine Try-Catch-Kombination verwenden, um einen etwas unerwarteten Fehler zu behandeln und etwas dagegen zu tun.

Als Beispiel

function [ output ] = test(input) 

    Bmat = [ 1 1 1 ] % Some matrix 

    try 
    input*B; 
    catch ME 
    disp(ME.message) 
    return;   % This is the statement that exits your function 
    end 

end 

Wenn Sie

>> test([1 1 1]) 

Es wird nicht, da die Variablen ‚Eingang‘ und ‚B‘ nicht übereinstimmen inneren Dimensionen arbeiten laufen, aber die ‚versuchen‘ Anweisung wird eine Ausnahme zum "fangen" werfen, und tun, was auch immer Sie von dort wollen. In diesem Fall wird eine Fehlermeldung in der Befehlszeile angezeigt und die Funktion beendet.

Die Variable 'ME' ist hier nur ein MATLAB-Objekt für die Fehlerbehandlung, und ME.message speichert eine Zeichenfolge, die den Fehlertyp enthält, den der Interpreter abgefangen hat.

Ich lese gerade Ihre Frage noch einmal ... Ich nehme an, der Befehl 'Return' ist wahrscheinlich, was Sie wirklich wollen, Sie können es verwenden, um jede Logik oder Schleife Anweisungen sowie Funktionen zu beenden.

Sie können mehr über die ‚Rückkehr‘ Befehl und Fehler aus der Dokumentation MATLAB Handhabung lesen,

http://www.mathworks.com/access/helpdesk/help/techdoc/ref/return.html

+0

'Rückkehr' funktioniert, außer wenn es mehr als eine Ausgänge gibt, eine Fehlermeldung würde auffordern. Nur schlechtes Design von Matlab, denke ich. – Argyll