Main Content

rethrow

重新引发以前捕获的异常

说明

示例

rethrow(exception) 重新引发以前捕获的异常 exception。MATLAB® 通常通过终止当前正在运行的程序响应错误。但是,可以使用 try/catch 块捕获异常。这会中断程序终止,这样您可以执行自己的错误处理过程。要终止程序并重新显示异常,请通过 rethrow 语句终止 catch 块。

rethrow 以不同于 errorassertthrow 的方式处理堆栈跟踪。rethrow 不从 MATLAB 执行该函数的位置创建堆栈,而是保留原始异常信息,使您能够追溯原始错误的来源。

示例

全部折叠

通过调用无输入的 surf 导致 MATLAB 引发错误。捕获异常,显示错误标识符并重新引发异常。

try
    surf
catch ME
    disp(['ID: ' ME.identifier])
    rethrow(ME)
end
ID: MATLAB:narginchk:notEnoughInputs
Error using surf (line 49)
Not enough input arguments.

在您的工作文件夹中创建一个函数 combineArrays

function C = combineArrays(A,B)
try
    C = catAlongDim1(A,B);       % Line 3
catch exception
    throw(exception)             % Line 5
end
end

function V = catAlongDim1(V1,V2)
V = cat(1,V1,V2);                % Line 10
end

调用数组大小不同的 combineArrays 函数。

A = 1:5;
B = 1:4;

combineArrays(A,B)
Error using combineArrays
Dimensions of matrices being concatenated are not consistent.

堆栈指向 MATLAB 引发异常的第 5 行。

combineArrays 的第 5 行将 throw(exception) 替换为 rethrow(exception),并重新调用该函数。

combineArrays(A,B)
Error using cat
Dimensions of matrices being concatenated are not consistent.

Error in combineArrays>catAlongDim1
V = cat(1,V1,V2);       

Error in combineArrays
    C = catAlongDim1(A,B);      

rethrow 函数保留原始堆栈并指示错误位于第 3 行。

输入参数

全部折叠

包含错误的原因和位置的异常,指定为标量 MException 对象。

版本历史记录

在 R2007b 中推出