Main Content

try, catch

ステートメントの実行と結果のエラーのキャッチ

構文

try
   statements
catch exception
   statements
end

説明

try statements, catch statements end は、try ブロック内のステートメントを実行し、発生したエラーを catch ブロックでキャッチします。この方法を使用して、一連のプログラム ステートメントの既定エラー動作をオーバーライドできます。try ブロックのいずれかのステートメントでエラーが生成されると、プログラムの制御は、直ちにエラー処理ステートメントが含まれている catch ブロックに移動します。

exception は、エラーの識別を可能にする MException オブジェクトです。catch ブロックは、現在の例外オブジェクトを exception の変数に割り当てます。

try ブロックと catch ブロックには、入れ子にされた try/catch ステートメントを含めることができます。

すべて折りたたむ

垂直に連結できない 2 つの行列を作成します。

A = rand(3);
B = ones(5);

C = [A; B];
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

try/catch を使用して、次元に関する詳細情報を表示します。

try
   C = [A; B];
catch ME
   if (strcmp(ME.identifier,'MATLAB:catenate:dimensionMismatch'))
      msg = ['Dimension mismatch occurred: First argument has ', ...
            num2str(size(A,2)),' columns while second has ', ...
            num2str(size(B,2)),' columns.'];
        causeException = MException('MATLAB:myCode:dimensions',msg);
        ME = addCause(ME,causeException);
   end
   rethrow(ME)
end 
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

Caused by:
    Dimension mismatch occurred: First argument has 3 columns while second has 5 columns.

行列の次元が一致しない場合、この不一致についての詳細情報が MATLAB® に表示されます。その他のエラーはすべて通常どおりに表示されます。

存在しない関数 notaFunction を呼び出して、生成されたすべての例外をキャッチします。例外がある場合、警告を表示して出力に値 0 を割り当てます。

try
    a = notaFunction(5,6);
catch
    warning('Problem using function.  Assigning a value of 0.');
    a = 0;
end
Warning: Problem using function.  Assigning a value of 0.

notaFunction への呼び出しは、それ自体がエラーになります。trycatch を使用すると、このコードはすべての例外をキャッチして警告として再パッケージ化するため、MATLAB は後続のコマンドを引き続き実行できます。

try/catch を使用して、種類が異なるエラーをそれぞれ異なる方法で処理します。

  • 関数 notaFunction が定義されていない場合、エラーの代わりに警告を発行し、出力に値 NaN を割り当てます。

  • notaFunction.m が関数ではなくスクリプトとして存在する場合には、エラーの代わりに警告を発行し、スクリプトを実行して、出力に値 0 を割り当てます。

  • MATLAB が前述以外の何らかの理由でエラーをスローした場合、例外を再度スローします。

try
    a = notaFunction(5,6);
catch ME
    switch ME.identifier
        case 'MATLAB:UndefinedFunction'
            warning('Function is undefined.  Assigning a value of NaN.');
            a = NaN;
        case 'MATLAB:scriptNotAFunction'
            warning(['Attempting to execute script as function. '...
                'Running script and assigning output a value of 0.']);
            notaFunction;
            a = 0;
        otherwise
            rethrow(ME)
    end
end
Warning: Function is undefined.  Assigning a value of NaN. 

ヒント

  • 1 つの try ブロック内に複数の catch ブロックを使用することはできません。ただし、try/catch ブロック全体を入れ子にすることは可能です。

  • 他の一部の言語と異なり、MATLAB では try/catch ステートメント内で finally ブロックを使用できません。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する