MException

获取错误信息

描述

任何MATLAB®代码检测到错误并抛出异常构造一个MException对象。的MException对象包含有关错误的检索信息。MATLAB可以抛出任何预定义异常或例外,你构建。

创建

描述

例子

我= MException (errID,msgtext)有关在特定错误,并将其存储捕获信息MException对象。的MException对象被构造以错误标识符errID还有一个错误信息msgtext

例子

我= MException (errID,msgtext,A1,...,一)允许使用文本或数值格式化错误消息A1,...,一更换转换指定的msgtext在运行时。

输入参数

展开全部

标识符误差,指定为字符向量或标量的字符串。使用错误标识符与异常处理,以更好地识别错误的来源或控制程序中的例外选择的子集。

标识包括一个或多个错误组件字段和助记符领域。字段必须用冒号分开。例如,与部件字段中的错误标识符组件和记忆领域助记符被指定为“部件:助记符”

  • 甲组件字段通常指定在其下可以产生各种错误的产品或功能。例如,错误标识符'MATLAB:TooManyInputs'有一个组件字段MATLAB,这意味着在MATLAB中抛出异常。您可以重用相同的助记符TooManyInputs只要你在它前面加上不同的组成部分。例如,如果您希望在调用带有太多输入的函数时在工具箱中抛出异常,则可以使用'MyToolbox:TooManyInputs'

  • 错误标识符的助记符字段通常是特定于错误问题的标记。例如,在报告MATLAB中使用歧义语法导致的错误时,可以将错误标识符指定为“MATLAB: ambiguousSyntax”

该组件和助记符字段必须每个字母开头。剩余的字符可以是字母数字(A-Z,A-Z,0-9)和下划线。没有空白字符可以出现在errID

例:'MyComponent的:noSuchVariable'

例:的万博1manbetxSimulink:信号:InvalidNumberOfPorts“

有关错误的原因,以及如何您可以改正它,指定为矢量字符或字符串标量信息。要格式化文本,使用转义序列,如\ t要么\ n。属性支持的任何格式说明符万博1manbetxsprintf功能,如%S要么% d。指定用于使用所述转换标识符值A1,...,一输入参数。

例:“打开文件时出错。”

例:'在第%d行发生错误。'

该替换转换指定值msgtext,每个指定为字符向量、字符串标量或数值标量。

属性

展开全部

此属性是只读的。

字符向量唯一地识别错误,指定为由字符向量errID输入参数。

例:MATLAB:测试的

此属性是只读的。

属性指定的包含MATLAB抛出异常时显示的错误消息的字符向量msgtextA1,...,一输入参数。

例:“变量x未找到”

此属性是只读的。

结构数组,包含堆栈跟踪信息,包括文件名(文件)、函数名称(的名字),及行号(线), MATLAB抛出异常。如果错误发生在被调用的函数中,则调用堆栈属性还包含文件名,函数名,并为每个调用的函数的行号。MATLAB生成栈只有当它抛出异常。

堆栈是一个N×1结构数组,N表示调用堆栈的深度。

此属性是只读的。

的单元阵列MException导致MATLAB创建例外对象。使用addCause方法添加异常到原因财产。

此属性是只读的。

建议修复异常,指定为amatlab.lang.correction.AppendArgumentsCorrection,matlab.lang.correction.ConvertToFunctionNotationCorrection,或matlab.lang.correction.ReplaceIdentifierCorrection对象。当抛出异常而没有捕获时,MATLAB使用修正属性建议对异常进行修复。

对象的功能

抛出异常
MException.last 最后返回未捕获的异常
重新抛出 重新抛出先前捕获的异常
throwAsCaller 抛出异常,就像在调用函数中发生一样
addCause 例外的录制更多的原因
addCorrection 提供了异常修复建议
getReport 获取异常的错误消息

例子

全部收缩

创建一个MException对象以捕获有关输入错误的信息。

errID ='myComponent的:inputError';msgtext =“输入没有预期的格式。”;我= MException (errID msgtext)
ME = MException与属性:标识符:“myComponent的:inputError”消息:“输入不具有预期的格式。”造成:{}堆栈:[结构为0x1]校正:[]

同时使用msgtextA1,...,一输入参数来创建的错误消息。

errID =MATLAB:测试的;msgtext =“本页有%d错误”;A1 = 10;ME = MException(ERRID,MSGTEXT,A1)
消息:“本页有10个错误”原因:{}stack: [0x1 struct]改正:[]

如果工作区中不存在输入变量名,则抛出异常。

STR =输入(“类型的变量名:”,“年代”);如果~存在(str,“var”)ME = MException('MyComponent的:noSuchVariable','变量%s未找到'str);把(我)结束

在输入提示符处,输入工作区中不存在的任何变量。例如,输入notaVariable

变量notavvariable未找到

以来notVariable在工作区中不存在,MATLAB创建并抛出MException对象。

采用试着抓访问在所捕获的信息MException对象。

创建文件myfile.m的调用冲浪函数没有输入。(这个函数调用会导致一个异常,目的是为了说明。)捕获MATLAB抛出的异常MException对象,并通过访问信息财产

尝试冲浪抓住ME DISP('错误信息:')disp (ME.message)结束
错误信息:没有足够的输入参数。

提取错误标识符。

ME.identifier
ans = ' MATLAB: narginchk: notEnoughInputs”

对象的内容堆栈财产。在本例中,调用堆栈被表示为一个2乘1的结构数组。

i = 1:numel(ME.stack) ME.stack(i)结束
ans = struct with fields: file: 'matlabroot\工具箱\ MATLAB \ graph3d \ surf.m '姓名: '冲浪' 行:49 ANS =结构与字段:文件:'C:\ myMATLABfiles\ myfile.m的名字: 'MYFILE' 行:2

的第一要素堆栈显示文件名(surf.m)、函数名称(冲浪),及行号(49)异常发生的地方。的第二个要素堆栈显示调用者脚本中发生异常的名称和行号。

捕获调用不存在的函数所生成的异常,notaFunction。如果未定义函数,则发出警告并将输出赋值为0。

尝试一个= notaFunction(5,6);抓住如果比较字符串(ME.identifier“MATLAB: UndefinedFunction”)警告(“功能是不确定的。分配0值”);其他重新抛出(我)结束结束
警告:功能是不明确的。分配值0。

就其本身而言,调用notaFunction导致错误。使用尝试抓住,此代码捕获未定义函数异常并将其重新打包为警告,从而允许MATLAB继续执行后续命令。如果捕获的异常具有不同的错误标识符,MATLAB会重新抛出异常。

介绍了R2007b