Как выйти из m-файла matlab (НЕ самого matlab), если пользователь вводит неверные данные? - PullRequest
12 голосов
/ 04 августа 2010

Как выйти из m-файла matlab (НЕ самого matlab), если пользователь вводит неверные данные?Я знаю, что если во время выполнения m-файл работает неправильно, мы можем нажать Ctrl-C, чтобы остановить его.но мне нужна команда, чтобы поместить это в мой m-файл, чтобы сделать это, если что-то плохое случится.

Пожалуйста, не предлагайте команды 'exit' или 'quit', поскольку они завершают весь matlab, и я не хочу этого.

Ответы [ 3 ]

13 голосов
/ 04 августа 2010

Я не уверен, как вы определяете «выход», но error кажется вам нужной функцией.

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

disp( sprintf('y=%f', y ) );
7 голосов
/ 05 августа 2010

Эй, я полагаю, вы могли бы использовать комбинацию try-catch для обработки несколько неожиданной ошибки и что-то с ней сделать.

Например,

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

Если вы запустите

>> test([1 1 1])

Это не сработает, поскольку переменные «input» и «B» не соответствуют внутренним измерениям, но оператор «try» вызовет исключение для «catch» и будет делать все, что вы хотите оттуда.В этом случае он отобразит сообщение об ошибке в командной строке и выйдет из функции.

Переменная 'ME' здесь является просто объектом MATLAB для обработки ошибок, а ME.message хранит строку, содержащую типошибки интерпретатор поймал.

Я просто прочитал ваш вопрос еще раз ... Я предполагаю, что команда 'return' - это, вероятно, то, что вам действительно нужно, вы сможете использовать ее для выхода из любых логических или циклических операторов, а также функций.

Подробнее о команде 'return' и обработке ошибок вы можете прочитать в документации MATLAB,

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

6 голосов
/ 04 августа 2010

Вы можете просто поместить команду ошибки, например, error («неверный ввод пользователя»), и она должна остановить скрипт.

Редактировать: в качестве альтернативы, вы можете просто изменить свой код, чтобы он не выполнялся, если вы не установите флаг ввода в значение true. Что-то вроде

inp = input('>', s)

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