主要内容

抛出异常

当您的程序检测到将使其无法按预期完成或将生成错误结果的错误时,您应该停止进一步执行并通过抛出异常报告错误。基本步骤如下:

  1. 检测错误。这通常使用某种类型的条件语句来完成,例如an如果try / catch语句,用于检查当前操作的输出。

  2. 构造一个MException对象来表示错误。在调用构造函数时向对象添加错误标识符和错误消息。

  3. 如果存在其他可能导致当前错误的异常,则可以存储MException对象的导致单个字段MException你打算扔的。使用addCause函数。

  4. 如果可以为当前错误建议修复程序,则可以将其添加到修正字段MException你打算扔的。使用addCorrection函数。

  5. 使用throwAsCaller函数有MATLAB®发出异常。此时,MATLAB将调用堆栈信息存储在堆栈字段MException,退出当前运行的函数,并将控制返回到键盘或调用函数中的封闭catch块。

关于如何抛出异常的建议

这个例子演示了使用刚才描述的步骤抛出异常。

创建一个函数,indexIntoArray,它使用指定索引将索引到指定数组中。该函数捕获MATLAB抛出的任何错误,并创建一个异常,提供关于错误的一般信息。当它捕捉到错误时,它检测错误是否涉及输入的数量或指定的索引。如果是,该函数会添加额外的异常,其中包含关于故障来源的更详细信息,并在可能的情况下建议纠正。

函数idx indexIntoArray(一个)% 1)检测错误。试一试(idx)构造一个MException对象来表示错误。errID =“MYFUN: BadIndex”;味精=“无法索引到数组。”;baseException = MException(errID,msg);% 3)存储任何导致错误的信息。如果nargin < 2 causeException = MException(“MATLAB: notEnoughInputs”“输入参数不够。”);baseException = addCause(baseException,causeException);% 4)如果可能,建议修正。如果(nargin > 1) exceptionCorrection = matlab.lang.correction.AppendArgumentsCorrection(' 1 ');baseException = baseException. addcorrection (exceptionCorrection);结束把(baseException);结束试一试断言(isnumeric (idx),“MYFUN: notNumeric”...索引数组不是数字。causeException baseException = addCause(baseException,causeException);结束如果any(size(idx) > size(A)) errID =“MYFUN: incorrectSize”;味精=索引数组太大。;causeException2 = MException(errID,msg);baseException = addCause(baseException,causeException2);结束% 5)抛出异常以停止执行并显示错误%的消息。把(baseException)结束结束

如果你在没有指定索引的情况下调用该函数,该函数将抛出一个详细的错误,并建议进行更正:

A = [13 42;7 20);indexIntoArray (A)
使用indexIntoArray错误(第21行)无法索引到数组。原因:输入参数不够。你的意思是:>> indexIntoArray(A, 1)

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

A = [13 42;7 20);Idx = [“一个”“b”“c”];idx indexIntoArray(一个)
使用indexIntoArray错误(第41行)无法索引到数组。(第25行)索引数组不是数值。索引数组太大。