2010-08-04 2 views
12

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

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

ответ

6

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

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

inp = input('>', s) 

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

Если есть несколько мест, где функция требует, чтобы выйти, это решение приводит к дереву бега это или нет какие-либо утверждения. Непрактичный. – Argyll

13

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

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

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

Несмотря на то, что он действителен и прост, использование 'error' с одним аргументом не является лучшим. Это предотвращает полную работу функций lasterror. Кроме того, специальные символы, такие как '' \ n'' в аргументе, не преобразуются. – horchler

+0

Я предполагаю, что вы предлагаете использовать параметр MSGID, хотя я не уверен, как его извлечь. Я отмечаю, что даже в 2017 году он требует, чтобы эти параметры были символьными массивами, а не строками ... человек, которого я ненавижу Matlab. – ensignr

7

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

В качестве примера,

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]) 

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

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

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

Вы можете прочитать больше о команде «возвращение» и обработки из документации MATLAB ошибки,

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

+0

'return' works, за исключением случаев, когда имеется более одного выхода, появится сообщение об ошибке. Думаю, плохой дизайн от Matlab. – Argyll

Смежные вопросы