MException
エラー情報を取得する
説明
エラーを検出して例外をスローする MATLAB® コードは、すべて MException
オブジェクトを構築します。MException
オブジェクトには取得可能なエラー情報が含まれています。MATLAB は事前定義された例外または自分で構築した例外をスローできます。
作成
説明
入力引数
errID
— エラーの識別子
文字ベクトル | string スカラー
エラーの識別子。文字ベクトルまたは 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'
msg
— エラー原因に関する情報
文字ベクトル | string スカラー
エラー原因に関する情報とその修正方法。文字ベクトルまたは string スカラーとして指定します。テキストの書式を設定するには、\t
や \n
などのエスケープ シーケンスを使用します。関数 sprintf
によってサポートされる %s
や %d
などの書式指定子も使用できます。A
入力引数を使用して変換指定子の値を指定します。
例: 'Error opening file.'
例: 'Error on line %d.'
A1,...,An
— 置換値
文字ベクトル | string スカラー | 数値スカラー
msg
内の変換指定子と置き換える 1 つ以上の値。各値は文字ベクトル、string スカラー、または数値スカラーとして指定します。
プロパティ
identifier
— 一意のエラー識別子
文字ベクトル
この プロパティ は読み取り専用です。
エラーを一意に識別する文字ベクトル。入力引数 errID
によって文字ベクトルとして指定します。
例: 'MATLAB:test'
message
— エラー メッセージ
文字ベクトル
この プロパティ は読み取り専用です。
MATLAB が例外をスローする際に表示されるエラー メッセージを含む文字ベクトル。msg
入力引数と A
入力引数により指定します。
例: 'Variable x not found'
stack
— スタック トレース情報
構造体配列
この プロパティ は読み取り専用です。
ファイル名 (file
)、関数名 (name
) および行番号 (line
) などの、MATLAB が例外をスローする場所のスタック トレース情報を含む構造体配列です。呼び出された関数でエラーが発生すると、呼び出された関数それぞれのファイル名、関数名および行番号が stack
プロパティに含まれます。MATLAB は例外をスローする場合にのみスタックを生成します。
stack
は N 行 1 列の struct
配列です。N は呼び出しスタックの深さを表します。
cause
— 例外の原因
MException
オブジェクトの cell 配列
この プロパティ は読み取り専用です。
MATLAB が例外を作成する原因となった MException
オブジェクトの cell 配列。addCause
メソッドを使用して、例外を cause
プロパティに追加します。
Correction
— 例外の修正候補
matlab.lang.correction.AppendArgumentsCorrection
オブジェクト | matlab.lang.correction.ConvertToFunctionNotationCorrection
オブジェクト | matlab.lang.correction.ReplaceIdentifierCorrection
オブジェクト
この プロパティ は読み取り専用です。
例外の修正候補。matlab.lang.correction.AppendArgumentsCorrection
オブジェクト、matlab.lang.correction.ConvertToFunctionNotationCorrection
オブジェクト、または matlab.lang.correction.ReplaceIdentifierCorrection
オブジェクトとして指定します。例外がスローされ、キャッチされない場合、MATLAB は Correction
プロパティを使用して例外の修正を提案します。
オブジェクト関数
throw | 例外のスロー |
MException.last | 最新のキャッチされていない例外を返す |
rethrow | 前回キャッチされた例外を再度スローする |
throwAsCaller | 呼び出し元の関数内で発生しているかのように例外をスロー |
addCause | 例外の追加の原因を記録する |
addCorrection | 例外の修正候補の提案 |
getReport | 例外のエラー メッセージを取得する |
例
MException オブジェクトの作成
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: [0x1 struct] Correction: []
書式化されたエラー メッセージの MException の作成
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: [0x1 struct] Correction: []
MException オブジェクトの作成とスロー
入力変数名がワークスペースにない場合に例外をスローします。
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
オブジェクトを作成しスローします。
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® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2007b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)