Main Content

throwAsCaller

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

説明

メモ

R2022b において: throw は、MATLAB® が関数を呼び出す場所からスタック トレースを作成するため、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
Input must be char.

Error in sayHello
checkInput(N)

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

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

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

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

入力引数

すべて折りたたむ

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

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2007b で導入