Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

throwAsCaller

呼び出し元の関数内で発生しているかのように例外をスロー

説明

throwAsCaller(exception) は、例外が呼び出し元の関数内で発生しているかのように例外をスローします。例外により現在実行している関数は終了して、制御をキーボードまたは囲んでいる catch ブロックのいずれかに返します。try/catch ステートメントの外部から例外をスローする場合、MATLAB® はコマンド ウィンドウにエラー メッセージを表示します。

try/catch ステートメントまたは関数 MException.last を介して、MException オブジェクトにアクセスできます。

場合によっては、エラーで実際に例外をスローしている関数を指すよりも、例外をもたらす呼び出し元の関数内の場所を指す方が有益です。throwAsCaller を使用して、エラー表示を単純化することができます。

すべて折りたたむ

作業フォルダーで、関数 sayHello を作成します。

function sayHello(N)
checkInput(N)
str = ['Hello, ' N '!'];
disp(str)

function checkInput(N)
if ~ischar(N)
    ME = MException('sayHello:inputError','Input must be char.');
    throw(ME)
end

コマンド プロンプトで、数値を入力して関数を呼び出します。

sayHello(42)
Error using sayHello>checkInput (line 9)
Input must be char.

Error in sayHello (line 2)
checkInput(N)

スタックの頂点が 9 行目を参照するのは、ここで MATLAB が例外をスローするためです。最初のスタック フレームの後で、MATLAB は呼び出し元関数からの情報を表示します。

sayHello.m の 9 行目の throw(ME)throwAsCaller(ME) で置き換えて、関数を再度呼び出します。

sayHello(42)
Error using sayHello (line 2)
Input must be char.

保存先スタックの頂点が 2 行目を参照するのは、ここが呼び出し元関数のエラーの場所であるためです。

入力引数

すべて折りたたむ

エラーの原因と場所を含む例外。スカラー MException オブジェクトとして指定します。

R2007b で導入