12.1.2 エラーのキャッチ
エラーが発生した場合は、 「try ステートメント」tryで説明されているように、ステートメントを使用してエラーを検出し、処理できます。例として、次のコードはループ中に発生したエラーの数をカウントします。 for
number_of_errors = 0; for n = 1:100 try ... catch number_of_errors++; end_try_catch endfor
上記の例では、すべてのエラーを同じように扱っています。しかし、多くの場合、エラーを区別し、エラーに応じて異なるアクションを実行する必要があります。このlasterror 関数は、最後に発生したエラーに関する情報を含む構造体を返します。たとえば、上記のコードを変更して、「*' 演算子。
number_of_errors = 0;
for n = 1:100
try
...
catch
msg = lasterror.message;
if (strfind (msg, "operator *"))
number_of_errors++;
endif
end_try_catch
endfor
あるいは、関数の出力は、キーワードlasterrorの直後に指定された変数で見つけることができますcatch。次の例では、エラーを警告としてリダイレクトする方法を示しています。
try ... catch err warning(err.identifier, err.message); ... end_try_catch
: lasterr = lasterror ()
: lasterror (err)
: lasterror ("reset")
最後のエラー メッセージ構造を照会または設定します。
引数なしで呼び出されると、最後のエラー メッセージとこのエラーに関連するその他の情報を含む構造体を返します。構造体の要素は次のとおりです。
message 最後のエラーメッセージのテキスト
identifier このエラーメッセージのメッセージ識別子
stack メッセージが発生した場所に関する情報を含む構造体。情報を取得できない場合は、空の構造体になることがあります。構造体のフィールドは次のとおりです。
file エラーが発生したファイルの名前
name エラーが発生した関数の名前
line エラーが発生した行番号
column エラーが発生した列番号を示すオプションのフィールド
最後のエラー構造体は、スカラー構造体 errを入力として渡すことによって設定できます。上記のものと一致するerrのフィールドはすべて設定され、指定されていないフィールドはデフォルト値で初期化されます。
lasterrorが引数 で呼び出されると"reset"、すべてのフィールドがデフォルト値に設定されます。
See also: lasterr, error, lastwarn.
: [msg, msgid] = lasterr ()
: lasterr (msg)
: lasterr (msg, msgid)
最後のエラー メッセージを照会または設定します。
入力引数なしで呼び出されると、最後のエラー メッセージとメッセージ識別子を返します。
引数を 1 つ指定すると、最後のエラー メッセージがmsgに設定されます。
引数が 2 つある場合は、最後のメッセージ識別子も設定します。
See also: lasterror, error, lastwarn.
次の例では、インデックス エラーをカウントします。エラーは、関数によって返される構造体のフィールド識別子を使用して検出されますlasterror。
number_of_errors = 0;
for n = 1:100
try
...
catch
id = lasterror.identifier;
if (strcmp (id, "Octave:invalid-indexing"))
number_of_errors++;
endif
end_try_catch
endfor
Octave とともに配布される関数は、次のいずれかのエラーを発行する可能性があります。
Octave:bad-alloc
メモリを割り当てることができなかったことを示します。
Octave:invalid-context
呼び出されたスコープ内で実行できない操作によってエラーが生成されたことを示します。たとえば、関数が print_usage ()Octave プロンプトから呼び出されると、このエラーが発生します。
Octave:invalid-fun-call
関数が間違った方法で呼び出されたことを示します (例: 入力引数の数が間違っている)。
Octave:invalid-indexing
データ型が誤ってインデックスされたことを示します。例: 配列の実数値インデックス、構造体の存在しないフィールドなど。
Octave:invalid-input-arg
関数が無効な入力引数で呼び出されたことを示します。
Octave:undefined-function
定義されていない関数の呼び出しを示します。関数は存在する可能性がありますが、Octave は検索パスでそれを見つけることができません。
エラーが処理されたら、それを再度発生させることができます。これは、エラーを検出する必要があるが、プログラムを中止する必要がある場合に役立ちます。これは、rethrow関数を使用して可能です。前の例を変更して、'*' 演算子を使用しますが、別の種類のエラーが発生した場合は中止します。
number_of_errors = 0;
for n = 1:100
try
...
catch
msg = lasterror.message;
if (strfind (msg, "operator *"))
number_of_errors++;
else
rethrow (lasterror);
endif
end_try_catch
endfor
: rethrow (err)
errで定義された以前のエラーを再発行します。
err は、少なくとも"message" および"identifier"フィールドを含む必要がある構造体です。err には"stack"、エラーの想定される場所に関する情報を提供するフィールドを含めることもできます 。通常、 errは から返されますlasterror。
See also: lasterror, lasterr, error.
: err = errno ()
: err = errno (val)
: err = errno (name)
システム依存変数 errno を照会または設定します。
入力なしで呼び出された場合は、errno の現在の値を返します。
数値入力valで呼び出されると、 errno の現在の値が指定された値に設定されます。 errno の以前の値はerrとして返されます。
文字列nameで呼び出されると、指定されたエラー コードに対応する errno の数値を返します。nameが認識されたエラー コードでない場合は、-1 が返されます。
See also: errno_list.
: S = errno_list ()
システム依存の errno 値を含む構造体を返します。
See also: errno.