Main Content

throwAsCaller

引发异常,如同发生在调用函数内

说明

示例

注意

在 R2022b 中: 推荐使用 throw 而不是 throwAsCaller,因为它从 MATLAB® 调用函数的位置创建堆栈跟踪。

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 中推出