ドキュメンテーション

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

addCause (MException)

例外の追加の原因を記録する

構文

baseExcep = addCause(baseExcep, causeExcep)

説明

baseExcep = addCause(baseExcep, causeExcep) は、既存の例外 baseExcep に情報を追加します。これは、例外の原因究明に役立ちます。追加される情報は、2 番目の例外 causeExcep の形式をとります。baseExcepcauseExcep はいずれも、MException クラスのオブジェクトです。baseExcep および causeExcep の入力はいずれも、mException クラスのスカラー オブジェクトです。

例外には、cause というプロパティがあります。このプロパティには、一連の追加例外を保存することができます。それぞれの例外には、最初のエラーの原因に関する情報が保存されます。(「MException クラス」については、ドキュメンテーションの図を参照)。プログラムが addCause を呼び出すと、MATLAB® は新しい例外 cause をベースとなる例外 exception にあるこのフィールドに追加します。エラー処理コードがエラーを try/catch ステートメントで捕捉する際、このステートメントの catch 部分の実行によって、ベースとなる例外と共に追加のあらゆる原因レコードが作成され、エラー診断に役立ちます。

この例では、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
この情報は役に立ちましたか?