主要内容

抛出一个例外

当您的程序检测到将从预期或将生成错误结果的故障时,您应该通过抛出异常来停止进一步执行并报告错误。所需的基本步骤是:

  1. 检测到错误。这通常是用某种类型的条件声明进行,例如如果要么试着抓调整检查当前操作的输出。

  2. 构建A.mexception.对象表示错误。调用构造函数时,将错误标识符和错误消息添加到对象。

  3. 如果还有可能对当前错误有贡献的其他例外,则可以存储mexception.每个物体都在原因单一的领域mexception.你打算扔掉。使用痛苦函数。

  4. 如果有解决当前错误可以提出修复,则可以将其添加到更正场面的领域mexception.你打算扔掉。使用addcorrection.函数。

  5. 使用要么BrownAscaller.有matlab的功能®发出例外。此时,Matlab存储呼叫堆栈信息场面的领域mexception.,退出当前运行的函数,并将控件返回给键盘或呼叫功能的封闭捕获块。

关于如何抛出异常的建议

此示例说明使用刚刚描述的步骤抛出异常。

创建一个函数,IndexIntoarray.,使用指定的索引索引到指定数组中。该函数捕获MATLAB抛出的任何错误,并创建了提供有关错误信息的一般信息的异常。当它捕获错误时,它会检测到错误是否涉及输入的数量或指定的索引。如果确实如此,该函数会添加其他异常,其中包含有关失败源的更详细信息,并在可能时提出更正。

功能IndexIntoArray(A,IDX)%1)检测错误。尝试一个(IDX)抓住%2)构造MEXception对象以表示错误。errid ='myfun:badindex';msg =.'无法索引到数组。';baseexception = mexception(错误,msg);%3)存储有助于错误的任何信息。如果nargin <2 geareexception = mexception('matlab:notenoughinputs''没有足够的输入参数。');baseexception = add,basexception,geareexception);%4)如果可能的话,建议更正。如果(nargin> 1)异常= matlab.lang.corrition.AppendArgumentsCorrection('1');baseexception = baseexception.addcorrection(例外);结尾投掷(BaseException);结尾尝试断言(Isnumeric(IDX),'myfun:notnumeric'......'索引数组不是数字。'抓住geareexception basexception = add,baseexception,causeexception);结尾如果任何(size(idx)>大小(a))errid ='myfun:不正确';msg =.'索引阵列太大了。';geareexception2 = mexception(错误,msg);baseexception = agtuause(baseexception,geareexception2);结尾%5)抛出异常以停止执行并显示错误% 信息。投掷(BaseException)结尾结尾

如果在不指定索引的情况下调用该函数,则该函数会抛出详细错误并建议更正:

a = [13 42;7 20];Indexintoarray(a)
使用IndexIntoArray(第21行)错误无法索引到数组中。由:不足的输入参数引起的。你的意思是:>> Indexintoarray(A,1)

如果使用过大的非数字索引数组调用函数,则该函数将抛出详细错误。

a = [13 42;7 20];idx = ['一种''B''C'];IndexIntoArray(A,IDX)
使用IndexIntoArray(第41行)错误无法索引到数组中。由:使用IndexIntoArray(第25行)索引数组的错误不是数字。索引数组太大。