Main Content

lasterror

最后一条错误消息和相关信息

不推荐使用 lasterror。请改用 MException。有关详细信息,请参阅兼容性考虑

语法

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

说明

s = lasterror 返回结构体 s,此结构体包含有关 MATLAB® 最近发出的错误的信息。返回的结构体包含以下字段:

字段名称描述

message

包含错误消息文本的字符数组。

identifier

包含错误标识符的字符数组。如果 MATLAB 发出的最后一个错误没有错误标识符,则 identifier 字段为空字符数组。

stack

提供有关错误位置的信息的结构体。结构体包含字段 filenameline,与 dbstack 函数返回的结构体相同。如果 lasterror 未返回堆栈信息,stack 是包含上面三个相同字段的 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 获取以下三个字段:

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 是 2×1 结构体,因为它提供有关失败子例程 check_inputs 以及外部主函数 average 的信息:

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 方法。

警告

不保证 lasterrorMException.last 始终都返回相同结果。例如,MException.last 仅对未捕获的错误更新其错误状态,而 lasterror 可以对任何错误(无论捕获与否)更新其错误状态。