3

すべてが独立して実行できるはずの複数のセルで構成されるMatlabスクリプトがあります(つまり、別のセルを実行するために1つのセルを実行する必要があるかもしれませんが、ワークスペースをクリアするまで、実行せずに2番目のセルを再度実行できるはずです。最初の1つ)。これらのセルのコードは(もちろん)失敗することがあります。失敗した場合は、特定のコマンドを実行したいと思います。

コードは複数の独立したセルにまたがっているため、これを実現するためにtry /catchブロックを使用することはできません。各セルに1つのtry/catchブロックを配置しない限り、これは望ましくありません。各セルはかなり短いので(ほとんどの場合、関数呼び出しを含む数行)、すべてのセルにtry / catchブロックを導入すると、スクリプトの長さが2倍になる可能性があります。

具体的には、最初のセルでログファイル()を開きます。このファイルは、任意のセルでエラーが発生した(そしてログに記録された)後にdiary filename.log自動的に閉じます( )。diary offこの設定は、少なくともログファイルが再び閉じられるまでオンになっている必要があり、プログラムで設定可能である必要があります(ログファイルを開いたのと同じセルに設定したい)。

どうすればこれを達成できますか?

4

1 に答える 1

0

コードをスクリプトとして保持する場合の最善の解決策は、try/catch各セルの周囲にブロックを配置することです。

それ以外の場合は、スクリプトをラップアラウンドする関数を作成できます。関数構文を使用すると、「エラーの場合はdbstop」を設定できるため、エラーが発生するとコードの実行が停止し、変数を調べて問題が発生した理由を特定できます。

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
于 2011-03-01T22:01:30.927 に答える