2010-08-04 10 views
12

¿Cómo salir de un m-archivo de matlab (NO el matlab mismo) si el usuario ingresa entradas incorrectas? Sé que si una m-file falla en el tiempo de ejecución, podemos presionar Ctrl-C para detenerla. pero necesito un comando para ponerlo en mi m-file para que lo haga si pasa algo malo.¿Cómo salir de un m-archivo de matlab (NO el matlab mismo) si el usuario ingresa entradas incorrectas?

No sugiera los comandos 'exit' o 'quit' porque terminan el matlab completo y no lo quiero.

Respuesta

6

Puede simplemente poner un comando de error como error ('entrada de usuario incorrecta') y debe detener el script.

Editar: alternativamente, podría refactorizar su código para que no se ejecute a menos que configure el indicador de entrada como verdadero. Algo así como

inp = input('>', s) 

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

Si hay varios lugares en los que una función tiene que salir, esta solución conduce a un árbol de Ejecución es o no tipo de declaraciones if. Poco práctico. – Argyll

13

No estoy seguro de cómo se defina "salida", pero error parece ser la función que necesita.

y = input('Please input a non-negative number: '); 
if(y<0) 
    error('input must be non-negative'); 
end 

disp(sprintf('y=%f', y)); 
+0

Aunque es válido y fácil, usar 'error' con un solo argumento no es el mejor. Evita que cosas como 'lasterror' funcionen por completo. Además, los caracteres especiales como ''\ n'' en el argumento no se convierten. – horchler

+0

Supongo que está sugiriendo usar el parámetro MSGID, aunque no estoy seguro de cómo extraerlo. Observo que incluso en 2017a requiere que estos parámetros sean matrices de caracteres, no cadenas ... hombre, odio a Matlab. – ensignr

7

Hey, yo supongo que se podría utilizar una combinación try-catch para controlar un error de algo inesperado y hacer algo al respecto.

A modo de ejemplo,

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 

Si ejecuta

>> test([1 1 1]) 

no va a funcionar ya que las variables de entrada '' y 'B' tiene dimensiones internas que no coinciden, pero el 'intenta' declaración arrojará una excepción a 'atrapar', y hará lo que quiera desde allí. En este caso, mostrará un mensaje de error en la línea de comando y saldrá de la función.

La variable 'ME' aquí es solo un objeto MATLAB para el manejo de errores, y ME.message almacena una cadena que contiene el tipo de error que capturó el intérprete.

Acabo de leer su pregunta de nuevo ... Supongo que el comando 'return' es probablemente lo que realmente está buscando, podrá usarlo para salir de cualquier instrucción de lógica o de bucle, así como de sus funciones.

Puede leer más sobre el comando 'retorno' y gastos de envío de la documentación de MATLAB error,

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

+0

'return' funciona, excepto si hay más de una salida, aparecerá un mensaje de error. Solo un mal diseño de Matlab, supongo. – Argyll

Cuestiones relacionadas