ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで変更されています。このリリースの英語のドキュメンテーションを参照するには、言語設定を United States に変更してください。

throw (MException)

例外を発行して関数を終了する

構文

throw(exception)

説明

throw(exception) は、exception に含まれている情報に基づいて例外を発行します。この例外によって、現在実行中の関数が終了され、制御が呼び出し元に返されます。exception 引数は、MException クラスから派生したスカラー オブジェクトで、エラーの原因と場所について情報が含まれています。関数 throw は、変数 exception を現在実行中の関数の呼び出し元に返します。そして最終的には、プログラム終了時にコマンド ウィンドウに返します。例外は、呼び出し元関数の場合には関数 try, catch、コマンド ウィンドウの場合には関数 MException.last によって使用可能になります。

また、関数 throwAsCaller および rethrow とは異なり、関数 throw は、exception の stack フィールドを、throw の呼び出し元に設定します。

例 1

この例では、関数 evaluate_plots の出力を検証します。受け入れられない場合には、例外をスローします。

[minval, maxval] = evaluate_plots(p24, p28, p41);
if minval < lower_bound || maxval > upper_bound
    exception = MException('VerifyOutput:OutOfBounds', ...
       'Results are outside the allowable limits');
    throw(exception);
end

例 2

この例では、MATLAB® パス上にないフォルダーにあるファイルを開こうとします。入れ子になった try-catch ブロックが使用されており、ユーザーがパスを展開できるようにしてあります。ファイルが依然として見つからない場合には、例外が発行され、最初のエラーが 2 番目のエラーの末尾に追加されます。これには、関数 addCause が使用されます。

function data = read_it(filename);
try
   % Attempt to open and read from a file.
   fid = fopen(filename, 'r');
   data = fread(fid);
catch exception1
   % If the error was caused by an invalid file ID, try 
   % reading from another location.
   if strcmp(exception1.identifier, 'MATLAB:FileIO:InvalidFid')
      msg = sprintf( ...
         '\nCannot open file %s. Try another location?  ', ...
         filename);
      reply = input(msg, 's')
      if reply(1) == 'y'
          newFolder = input('Enter folder name:  ', 's');
      else
          throw(exception1);
      end
      oldpath = addpath(newFolder);
      try
         fid = fopen(filename, 'r');
         data = fread(fid);
      catch exception2
         exception3 = addCause(exception2, exception1)
         path(oldpath);
         throw(exception3);
      end
      path(oldpath);
   end
end
fclose(fid);
try
   d = read_it('anytextfile.txt');
catch exception
end

exception
exception =
	MException object with properties:

    identifier: 'MATLAB:FileIO:InvalidFid'
       message: 'Invalid file identifier.  Use fopen 
                 to generate a valid file identifier.'
         stack: [1x1 struct]
         cause: {[1x1 MException]}

  Cannot open file anytextfile.txt. Try another location?y
Enter folder name:  xxxxxxx
Warning: Name is nonexistent or not a directory: xxxxxxx.
> In path at 110
  In addpath at 89

詳細

すべて展開する

ヒント

MATLAB で例外をスローする方法は 4 とおりあります (以下のリストを参照)。障害対策の結果を検証し、障害を MATLAB に報告するには、最初に紹介する方法を使用します。残りの 3 とおりの手法のいずれかを使用して、既存の例外をスローします。

  1. プログラムが実行する対策の結果を検証します。結果が不正確か想定外である場合には、適切なメッセージとメッセージ識別子を作成し、関数 error を使用して MATLAB に渡します。

  2. 最初のエラー レコードを変更しないでスローして、元の例外を再発行します。そのためには、MException rethrow メソッドを使用します。

  3. エラーの原因に関する追加情報を収集し、新しい例外または変更された例外に保存し、そのレコードに基づいて新しい例外を発行します。そのためには、MException addCause メソッドと throw メソッドを使用します。

  4. 現在実行中の関数の呼び出し元から発生したエラーであるかのように見せます。そのためには、MException throwAsCaller メソッドを使用します。

この情報は役に立ちましたか?