Main Content

lasterror

最新のエラー メッセージとその関連情報を出力

lasterror は推奨されません。代わりに MException を使用してください。詳細については、互換性についての考慮事項を参照してください。

構文

s = lasterror
s = lasterror(err)
s = lasterror('reset')

説明

s = lasterror は、MATLAB® が発行する最新のエラー情報をもつ構造体 s を返します。返される構造体は、以下のフィールドを含みます。

フィールド名説明

message

エラー メッセージのテキストを含む文字配列。

identifier

エラーの識別子を含む文字配列。MATLAB が発行する最新のエラーがエラー識別子をもたない場合、identifier フィールドは空の文字配列になります。

stack

エラーの場所情報をもつ構造体。この構造体は、filenameline の各フィールドをもちます。これは関数 dbstack によって返される構造体と同じです。関数 lasterror が stack 情報を返さない場合、stack は同じように 3 つのフィールドをもち、0 行 1 列の構造体になります。

メモ

lasterror によって返される構造体は、以降の MATLAB のバージョンで追加のフィールドを含む可能性があります。

stack に返される構造体のフィールドは、以下のようになります。

フィールド名説明

file

エラーを生成した関数のファイル名。このフィールドは、ファイルがない場合は、空の文字ベクトルです。

name

エラーが起こった関数の名前。これがファイルのプライマリ関数であり、関数名がファイル名と異なる場合、name はファイル名に設定されます。

line

エラーが起こったファイルの行番号。

エラー識別子の詳細については、MException を参照してください。

s = lasterror(err) は、最新のエラー情報を構造体 err の中で指定されたエラー メッセージと識別子に設定します。設定後、関数 lasterror を呼び出すと、この新しいエラー情報を返します。オプションの戻り構造体 s は、前回のエラーに関する情報を含んでいます。

s = lasterror('reset') は、最新のエラー情報を既定の状態に設定します。この状態では、返される構造体の messageidentifier フィールドは空の文字ベクトルになり、stack フィールドは 0 行 1 列の構造体になります。

例 1

以下の MATLAB コードを average.m というファイルに保存します。

function y = average(x)
% AVERAGE Mean of vector elements.
% AVERAGE(X), where X is a vector, is the mean of vector elements.
% Nonvector input results in an error.
check_inputs(x)
y = sum(x)/length(x);      % The actual computation

function check_inputs(x)
[m,n] = size(x);
if (~((m == 1) || (n == 1)) || (m == 1 && n == 1))
    error('AVG:NotAVector', 'Input must be a vector.')
end

関数を実行します。この関数はベクトル入力を必要としますが、エラーを起こすために、スカラー値を渡します。エラーは、サブルーチン check_inputs で起こります。

average(200)
Error using average>check_inputs (line 11)
Input must be a vector.

Error in average (line 5)
check_inputs(x)

関数 lasterror から 3 つのフィールドを取得します。

err = lasterror
err = 
       message: [1x61 char]
    identifier: 'AVG:NotAVector'
         stack: [2x1 struct]

エラー メッセージのテキストを表示します。

msg = err.message
msg =
    Error using average>check_inputs (line 11)
    Input must be a vector.

stack 情報をもつフィールドを表示します。err.stack は、実行に失敗したサブルーチン check_inputs とその外側のプライマリ関数 average の情報を示す 2 行 1 列の構造体です。

st1 = err.stack(1,1)
st1 = 
    file: 'd:\matlab_test\average.m'
    name: 'check_inputs'
    line: 11

st2 = err.stack(2,1)
st2 = 
    file: 'd:\matlab_test\average.m'
    name: 'average'
    line: 5

メモ

一般に、プライマリ関数の名前は、そのプライマリ関数を含むファイルと同じ名前にします。これらの名前が異なる場合、MATLAB は stack 構造体の name フィールドにファイル名を使用します。

例 2

lasterror は、多くの場合、try, catch ステートメント内の関数 rethrow と組み合わせて使用されます。以下に例を示します。

try
   do_something
catch
   do_cleanup
   rethrow(lasterror)
end

拡張機能

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

バージョン履歴

R2006a より前に導入

すべて折りたたむ

R2007b: lasterror は非推奨

MathWorks® は、MATLAB エラーの取り扱いを MException クラスに基づくオブジェクト指向のスキームに徐々に移行します。関数 lasterror のサポートは継続する予定ですが、MException の静的な MException.last メソッドを使用することを推奨します。

警告

関数 lasterror と関数 MException.last は常に同じ結果を返すという保証はありません。たとえば、関数 MException.last は検出されなかったエラーについてのみエラー ステータスを更新しますが、関数 lasterror は検出されていたかどうかにかかわらず、すべてのエラーのエラー ステータスを更新します。