MException
エラー情報を取得する
説明
エラーを検出して例外をスローする MATLAB® コードは、すべて MException
オブジェクトを構築します。MException
オブジェクトには取得可能なエラー情報が含まれています。MATLAB は事前定義された例外または自分で構築した例外をスローできます。
作成
説明
入力引数
エラーの識別子。文字ベクトルまたは string スカラーとして指定します。例外処理でエラー識別子を使用すると、エラー原因を特定したり、プログラム内の例外のサブセットを選択して制御したりできます。
エラー識別子には 1 つ以上の "コンポーネント" フィールドと 1 つの "ニーモニック" フィールドが含まれます。フィールドはコロンで区切られなければなりません。たとえば、コンポーネント フィールド component
およびニーモニック フィールド mnemonic
をもつエラー識別子は 'component:mnemonic'
として指定します。
一般に、コンポーネント フィールドは、さまざまなエラーが生成される可能性のある製品や機能を指定します。たとえば、エラー識別子
'MATLAB:TooManyInputs'
にはコンポーネント フィールドMATLAB
があります。これは、MATLAB で例外がスローされることを意味します。異なるコンポーネントを前に追加する限り、同じニーモニックTooManyInputs
を再使用できます。たとえば、多すぎる入力で関数が呼び出されるたびにツールボックスで例外をスローする場合は、'MyToolbox:TooManyInputs'
を使用できます。エラー識別子のニーモニック フィールドは、一般に、エラーの問題に固有のタグです。たとえば、MATLAB であいまいな構文の使用の結果として生じるエラーを報告する場合、エラー識別子を
'MATLAB:ambiguousSyntax'
として指定できます。
コンポーネント フィールドとニーモニック フィールドはそれぞれ、文字で始まらなければなりません。残りの文字には英数字 (A ~ Z、a ~ z、0 ~ 9) とアンダースコアを使用できます。errID
には空白文字は使用できません。
例: 'MyComponent:noSuchVariable'
例: 'Simulink:Signals:InvalidNumberOfPorts'
エラー原因に関する情報とその修正方法。文字ベクトルまたは string スカラーとして指定します。テキストの書式を設定するには、\t
や \n
などのエスケープ シーケンスを使用します。関数 sprintf
によってサポートされる %s
や %d
などの書式指定子も使用できます。A
入力引数を使用して変換指定子の値を指定します。
例: 'Error opening file.'
例: 'Error on line %d.'
msg
内の変換指定子と置き換える 1 つ以上の値。各値は文字ベクトル、string スカラー、または数値スカラーとして指定します。
プロパティ
この プロパティ は読み取り専用です。
エラーを一意に識別する文字ベクトル。入力引数 errID
によって文字ベクトルとして指定します。
例: 'MATLAB:test'
この プロパティ は読み取り専用です。
MATLAB が例外をスローする際に表示されるエラー メッセージを含む文字ベクトル。msg
入力引数と A
入力引数により指定します。
例: 'Variable x not found'
この プロパティ は読み取り専用です。
ファイル名 (file
)、関数名 (name
) および行番号 (line
) などの、MATLAB が例外をスローする場所のスタック トレース情報を含む構造体配列です。呼び出された関数でエラーが発生すると、呼び出された関数それぞれのファイル名、関数名および行番号が stack
プロパティに含まれます。MATLAB は例外をスローする場合にのみスタックを生成します。
stack
は N 行 1 列の struct
配列です。N は呼び出しスタックの深さを表します。
この プロパティ は読み取り専用です。
MATLAB が例外を作成する原因となった MException
オブジェクトの cell 配列。addCause
メソッドを使用して、例外を cause
プロパティに追加します。
この プロパティ は読み取り専用です。
例外の修正候補。matlab.lang.correction.AppendArgumentsCorrection
オブジェクト、matlab.lang.correction.ConvertToFunctionNotationCorrection
オブジェクト、または matlab.lang.correction.ReplaceIdentifierCorrection
オブジェクトとして指定します。例外がスローされ、キャッチされない場合、MATLAB は Correction
プロパティを使用して例外の修正を提案します。
オブジェクト関数
throw | 例外のスロー |
MException.last | 最新のキャッチされていない例外を返す |
rethrow | 前回キャッチされた例外を再度スローする |
throwAsCaller | 呼び出し元の関数内で発生しているかのように例外をスロー |
addCause | 例外の追加の原因を記録する |
addCorrection | 例外の修正候補の提案 |
getReport | 例外のエラー メッセージを取得する |
例
MException
オブジェクトを作成して、入力エラーについての情報を取得します。
errID = 'myComponent:inputError'; msgtext = 'Input does not have the expected format.'; ME = MException(errID,msgtext)
ME = MException with properties: identifier: 'myComponent:inputError' message: 'Input does not have the expected format.' cause: {} stack: [0×1 struct] Correction: []
msgtext
と A1,...,An
の入力引数の両方を使用してエラー メッセージを作成します。
errID = 'MATLAB:test'; msgtext = 'There are %d errors on this page'; A1 = 10; ME = MException(errID,msgtext,A1)
ME = MException with properties: identifier: 'MATLAB:test' message: 'There are 10 errors on this page' cause: {} stack: [0×1 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
オブジェクトを作成しスローします。
try, catch
を使用して MException
オブジェクトで取得された情報にアクセスします。
関数 surf
への入力なしの呼び出しを含むファイル myfile.m
を作成します (この関数の呼び出しは結果的に例外となりますが、説明を分かりやすくするためにそうしています)。MATLAB がスローする例外を MException
オブジェクト ME
でキャッチし、ME
の message
プロパティにアクセスしてエラー メッセージを表示します。
try surf catch ME disp('Error Message:') disp(ME.message) end
Error Message: Not enough input arguments.
エラー識別子を抽出します。
ME.identifier
ans = 'MATLAB:narginchk:notEnoughInputs'
stack
プロパティの内容をクエリします。この例では、呼び出しスタックは 2 行 1 列の構造体配列で表されます。
for i = 1:numel(ME.stack) ME.stack(i) end
ans = struct with fields: file: 'matlabroot\toolbox\matlab\graph3d\surf.m' name: 'surf' line: 49 ans = struct with fields: file: 'c:\myMATLABfiles\myfile.m' name: 'myfile' line: 2
stack
の最初の要素は例外が発生したときのファイル名 (surf.m
)、関数名 (surf
)、行数 (49
) を表示します。stack
の 2 番目の要素は、呼び出し元のスクリプトで例外が発生した名前と行数を示します。
存在しない関数 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
への呼び出しは、それ自体がエラーになります。このコードで try
と catch
を使用して未定義の関数の例外を検出し、警告として再パッケージ化することで、MATLAB は引き続き後続のコマンドを実行することができます。検出された例外のエラー識別子が異なる場合、MATLAB は例外を再スローします。
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2007b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)