最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

MException

エラー情報を取得する

説明

エラーを検出して例外をスローする MATLAB® コードは MException オブジェクトを構築する必要があります。このクラスには取得可能なエラー情報が含まれています。MATLAB は事前定義された例外または自分で構築した例外をスローできます。

作成

説明

ME = MException(msgID,msgtext) は、特定のエラーについての情報を取得して、MException オブジェクト ME に保存します。MException オブジェクトは、メッセージ識別子 msgID とエラー メッセージ msgtext を使って構築されます。

ME = MException(msgID,msgtext,A1,...,An) は、テキストまたは数値 A1,...,An を使用してエラー メッセージの書式を設定し、msgtext の変換指定子を実行時に置き換えることができます。

入力引数

すべて展開する

エラーの識別子。文字ベクトルまたは string スカラーとして指定します。例外処理でメッセージ識別子を使用すると、エラー原因を特定したり、プログラム内の例外のサブセットを選択して制御できます。

メッセージ識別子には componentmnemonic が含まれます。識別子には常にコロンが含まれていて、component:mnemonic というシンプルな形式に従っていなければなりません。component フィールドおよび mnemonic フィールドはそれぞれ、英字で始まっていなければなりません。残りの文字には英数字 (A ~ Z、a ~ z、0 ~ 9) とアンダースコアを使用できます。msgID に空白文字を含めることはできません。詳細については、メッセージ識別子を参照してください。

例: 'MyComponent:noSuchVariable'

エラー原因に関する情報とその修正方法。文字ベクトルまたは string スカラーとして指定します。テキストの書式を設定するには、\t\n などのエスケープ シーケンスを使用します。関数 sprintf によってサポートされる %s%d などの書式指定子も使用できます。A1,...,An 入力引数を介して変換指定子の値を指定します。詳細については、テキストの書式設定を参照してください。

例: 'Error opening file.'

例: 'Error on line %d.'

msgtext 内の変換指定子と置き換える値。文字ベクトル、string スカラーまたは数値スカラーとして指定します。

プロパティ

すべて展開する

エラーを一意に識別する文字ベクトル。入力引数 msgID によって文字ベクトルとして指定します。このプロパティは読み取り専用です。詳細については、メッセージ識別子を参照してください。

例: 'MATLAB:test'

データ型: char

MATLAB が例外をスローする際に表示されるエラー メッセージを含む文字ベクトル。msgtext 入力引数と A1,...,An 入力引数により指定します。このプロパティは読み取り専用です。詳細については、エラー メッセージのテキストを参照してください。

例: 'Variable x not found'

データ型: char

ファイル名 (file)、関数名 (name) および行番号 (line) などの、MATLAB が例外をスローする場所のスタック トレース情報を含む構造体配列です。呼び出された関数でエラーが発生すると、呼び出された関数それぞれのファイル名、関数名および行番号が stack プロパティに含まれます。MATLAB は例外をスローする場合にのみスタックを生成します。

stack は N 行 1 列の struct 配列です。N は呼び出しスタックの深さを表します。このプロパティは読み取り専用です。詳細については、呼び出しスタックを参照してください。

データ型: struct

MATLAB がこの例外を作成する原因となる MException オブジェクトの cell 配列。addCause メソッドを使用して、例外を別の例外の cause フィールドに追加します。詳細については、配列 Causeを参照してください。

この例外の修正候補。matlab.lang.correction.AppendArgumentsCorrection オブジェクト、matlab.lang.correction.ConvertToFunctionNotationCorrection オブジェクトまたは matlab.lang.correction.ReplaceIdentifierCorrection オブジェクトとして指定します。例外がスローされ、キャッチされない場合、MATLAB は Correction プロパティを使用して例外の修正を提案します。

オブジェクト関数

throw例外のスロー
MException.last最新のキャッチされていない例外を返す
rethrow前回キャッチされた例外を再度スローする
throwAsCaller呼び出し元の関数内で発生しているかのように例外をスロー
addCause例外の追加の原因を記録する
addCorrection例外の修正候補の提案
getReport例外のエラー メッセージを取得する

すべて折りたたむ

msgID = 'myComponent:inputError';
msgtext = 'Input does not have the expected format.';

ME = MException(msgID,msgtext)
ME = 
  MException with properties:

    identifier: 'myComponent:inputError'
       message: 'Input does not have the expected format.'
         cause: {}
         stack: [0x1 struct]
    Correction: []

msgID = 'MATLAB:test';
msgtext = 'There are %d errors on this page';
A1 = 10;

ME = MException(msgID,msgtext,A1)
ME = 
  MException with properties:

    identifier: 'MATLAB:test'
       message: 'There are 10 errors on this page'
         cause: {}
         stack: [0x1 struct]
    Correction: []

入力変数名がワークスペースにない場合に例外をスローします。

str = input('Type a variable name: ','s');
if ~exist(str,'var')
    ME = MException('MyComponent:noSuchVariable', ...
        'Variable %s not found',str);
    throw(ME)
end

入力プロンプトでは、ワークスペースにない変数を入力します。たとえば、notaVariable を入力します。

Variable notaVariable not found

notVariable はワークスペースに存在しないため、MATLAB は MException オブジェクトを作成して、それをスローします。

存在しない関数 notaFunction を呼び出すことで生成された例外を検出します。関数が定義されていないと、警告を発行して出力に値 0 を割り当てます。

try
    a = notaFunction(5,6);
catch ME
    if strcmp(ME.identifier,'MATLAB:UndefinedFunction')
        warning('Function is undefined.  Assigning a value of 0.');
    else
        rethrow(ME)
    end
end
Warning: Function is undefined.  Assigning a value of 0. 

notaFunction への呼び出しは、それ自体がエラーになります。このコードで trycatch を使用して未定義の関数の例外を検出し、警告として再パッケージ化することで、MATLAB は引き続き後続のコマンドを実行することができます。検出された例外のエラー識別子が異なる場合、MATLAB は例外を再スローします。

R2007b で導入