Выполнить указанную команду при ошибке без try / catch в Matlab - PullRequest
3 голосов
/ 01 марта 2011

У меня есть скрипт Matlab, состоящий из нескольких ячеек, которые все должны быть в состоянии выполнить независимо (т.е. мне может потребоваться выполнить одну ячейку, чтобы выполнить другую, но пока я не очищу рабочее пространство, я смогу выполнить вторую ячейку снова без выполнения первого). Код в этих ячейках иногда дает сбой (конечно), и в случае их возникновения я хочу выполнить определенную команду.

Поскольку код распространяется по нескольким независимым ячейкам, я не могу использовать блок try / catch для достижения этой цели - нет, если я не добавлю по одному блоку try / catch в каждую ячейку, чего я не хочу. Каждая ячейка довольно короткая (в основном несколько строк с вызовами функций), поэтому введение блока try / catch в каждую ячейку, вероятно, удвоит длину скрипта.

В частности, я хочу открыть файл журнала (diary filename.log) в первой ячейке, который автоматически закрывается (diary off) после того, как ошибка возникла (и была зарегистрирована) из любой ячейки. Этот параметр должен быть включен, по крайней мере, до тех пор, пока файл журнала снова не будет закрыт, и должен быть установлен программно (я хочу установить его в той же ячейке, где я открываю файл журнала).

Как мне это сделать?

1 Ответ

0 голосов
/ 02 марта 2011

Если вы хотите сохранить свой код в виде скрипта, лучшим решением будет поместить блок try/catch вокруг каждой ячейки.

В противном случае вы можете создать функцию, чтобы обернуть вокруг вашего скрипта. Синтаксис функции позволяет вам установить 'dbstop if error', чтобы выполнение кода останавливалось на ошибке, которая позволяет вам проверять переменные и точно определять, почему что-то пошло не так.

function output = run(listOfCells,input)
%#RUN evaluates the cells listed in listOfCells

try

diary filename.log

if any(listOfCells==1)
%# evaulate cell 1

end

if any(listOfCells==2)
%# evaluate cell 2

end

...

catch
%# close the diary in case of error
diary off
end %# try
...