4

GNU Octaveで例外をキャッチするための正しい構文は何ですか?ファイルが存在しない場合に失敗する行があります。

mymatrix = load("input.txt");

input.txtに不正な行が含まれている場合は、次のようなオクターブバーフを使用します。

error: load: unable to extract matrix size from file `input.txt'
error: called from:
error: /home/el/loadData.m at line 93, column 20
error: main at line 37, column 86
error: /home/el/main.m at line 132, column 5

Octaveでtry/catchブロックを使用したいのですが、適切な構文は何ですか?

入力ファイルに問題があること(列が欠落している、列が正しく構成されていない、列が多すぎる、文字が間違っているなど)をユーザーにクリーンかつ正確に報告し、回復できるようにしたいと考えています。不可解なエラーを吐き出して停止するだけではありません。それを行うための最良の方法は何ですか?

4

1 に答える 1

2

まず、Octave try/catchの公式ドキュメントをお読みください

および一般的な例外処理

GNUOctaveで例外をキャッチするための正しい構文は次のとおりです。

%make sure foobar.txt does not exist.
%Put this code in mytest.m.

try
  mymatrix = load("foobar.txt");   %this line throws an exception because 
                                   %foobar does not exist.
catch
  printf ("Unable to load file: %s\n", lasterr)
end


disp(mymatrix)  %The program will reach this line when the load command
%fails due to missing input file.  The octave catch block eats the 
%exception and ignores it.

上記のコードを実行すると、次のように出力されます。

Unable to load file: load: unable to find file foobar.txt

次に、ロードファイルからスローされた例外は無視されます。disp(mymatrix)がtryブロックで定義されていないため、mymatrixが定義されていないため、追加の例外によってプログラムが停止します。

于 2012-08-24T18:59:16.130 に答える