【精选】解决matlab 关于警告(warning)、错误(error)、异常(exception)与断言(assert)问题总结 您所在的位置:网站首页 matlab分号怎么用 【精选】解决matlab 关于警告(warning)、错误(error)、异常(exception)与断言(assert)问题总结

【精选】解决matlab 关于警告(warning)、错误(error)、异常(exception)与断言(assert)问题总结

#【精选】解决matlab 关于警告(warning)、错误(error)、异常(exception)与断言(assert)问题总结| 来源: 网络整理| 查看: 265

在使用matlab中难免会遇到警告(warning)、错误(error)、异常(exception)与断言(assert)等问题,那如何解决呢???

本文将从警告(warning)、错误(error)、异常(exception)与断言(assert)全面展开,帮你汇总了主要的问题及解决办法,相信通过本片博文的学习,你会对警告(warning)、错误(error)、异常(exception)与断言(assert)会一个更加全面的认识。。。。

警告(warning)、错误(error)、异常(exception)与断言(assert) 警告(warning)警告样式消除警告常见警告解决 error:抛出错误并显示消息错误抛出样式提示常见语法错误及解决1.Subscript indices must either be real positive integers or logicals2.Undefined function or variable “U”3.Matrix dimensions must agree4.Function definitions are not permitted at the prompt or in scripts5.One or more output arguments not assigned during call to ”…”6.Index exceeds matrix dimensions.7.In an assignment A(I) = B, the number of elements in B and I must be the same 异常(exception)MException 捕获异常信息类 断言(assert)自定义的assert函数代码 警告与错误的区别warning('message')error('message')errordlg('errorstring','dlgname') 资源传送门「❤️ 感谢大家」

警告(warning) 警告样式

warning函数用来显示警告消息并设置 lastwarn 函数的警告状态。如果 msg 为空,则 warning 将重置 lastwarn 的警告状态,但不显示任何文本。

具体语法包括如下:

warning(msg) warning(msg,A1,…,An) warning(msgID,___) warning(state) warning(state,msgID) warning warnStruct = warning warning(warnStruct) warning(state,mode) warnStruct = warning(state,mode) 消除警告

有的时候不需要警告,那如何消除警告呢??

warning on 开启警告/显示警告 warning off 关闭警告/不显示警告

或者可以使用warning('off')

常见警告解决

例如1:

warning(['Your directory containes unremoved score cache files. Results may not be accurate.'... 'Please remove any file in the format aXX.rr_* : ' ]);

警告: Y您的目录包含未删除的分数缓存文件。结果可能不准确。请删除任何格式 aXX.rr_* :的文件。

解决办法:

在代码的首行加入:warning('off')

例如 2:

打开Matlab时,提示“警告: 名称不存在或不是目录”。如下图所示。

在这里插入图片描述 但是在“设置路径”中却没有该路径。

在这里插入图片描述

解决方法:

1.在命令行窗口输入edit pathdef.m 在这里插入图片描述2.从pathdef.m文件中找到警告的目录,并删除。3.保存pathdef.m文件

重启Matlab后不再有警告。

例如 3:

有时候,根据图像的大小,当我在MATLAB中调用addframe将2D图像添加到视频时,会出现以下警告消息。

Warning: The frame height has been padded to be a multiple of four as required by the specified codec. In avifile.addframe at 127

解决办法:

使用warning命令,可以按ID清除所有警告或特定警告:

WARNING('OFF', 'MSGID') 或者 WARNING('ON', 'MSGID')

error:抛出错误并显示消息 错误抛出样式

error(msg) 抛出错误并显示错误消息。

error(msg,A1,...,An) 显示一条错误消息,其中包含格式设置转换字符,例如随 sprintf 函数一起使用的字符。msg 中的每个转换字符都会转换为 A1,…,An 中的一个值。

error(errID,___) 包含此异常中的错误标识符。此标识符可用于区分错误,它还允许您控制在 MATLAB 遇到错误时系统做何反应。您可以包括先前语法中的任何输入参数。

error(errorStruct) 使用标量结构体中的字段抛出错误。

error(correction,___) 为异常提供建议修复。您可以包括先前语法中的任何输入参数。

例如1:抛出错误

msg = 'Error occurred.'; error(msg) Error occurred.

例如 2 :抛出带格式化消息的错误 抛出带有换行符的格式化错误消息。如果您希望 MATLAB 转换错误消息中的特殊字符(例如 \n),必须为 error 指定多个输入参数。在错误消息中包含有关变量 n 的类的信息。

n = 7; if ~ischar(n) error('Error. \nInput must be a char, not a %s.',class(n)) end Error. Input must be a char, not a double.

如果对 error 只使用一个输入参数,则 MATLAB 不会将 \n 转换为换行符。

if ~ischar(n) error('Error. \nInput must be a char.') end Error. \nInput must be a char.

抛出带有标识符的错误。

if ~ischar(n) error('MyComponent:incorrectType',... 'Error. \nInput must be a char, not a %s.',class(n)) end Error. Input must be a char, not a double.

使用 MException.last 查看最后未捕获的异常。

exception = MException.last exception = MException with properties: identifier: 'MyComponent:incorrectType' message: 'Error. Input must be a char, not a double.' cause: {0x1 cell} stack: [0x1 struct]

例如3 :引发结构体形式的错误 创建包含消息和标识符字段的结构体。为确保示例简洁,不要使用堆栈字段。

errorStrucssage = 'Data file not found.'; errorStruct.identifier = 'MyFunction:fileNotFound'; errorStruct = message: 'Data file not found.' identifier: 'MyFunction:fileNotFound'

抛出错误。

error(errorStruct) Data file not found.

例如4: 引发带建议修复的错误 创建需要一个输入参数的函数 hello。在错误消息中添加建议的输入参数 “world”。

function hello(audience) if nargin > hello("world") 提示 抛出错误时,MATLAB 会捕获该错误的相关信息并将其存储在 MException 类对象数据结构体中。您可以使用 try/catch 来访问异常对象中的信息。或者,如果程序由于异常而终止,并将控制权返回至命令提示符,则可以使用 MException.last。如果 try 内发生错误,MATLAB 不会停止执行程序。在本例中,MATLAB 将控件传递到 catch 块中。如果 error 的所有输入为空,则 MATLAB 不会抛出错误。 常见语法错误及解决 1.Subscript indices must either be real positive integers or logicals

中文解释:下标索引必须是正整数类型或者逻辑类型 出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。 解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。

2.Undefined function or variable “U”

中文解释:函数或变量 U 没有定义 出错原因及解决办法:可能变量名输入错误,仔细检查

3.Matrix dimensions must agree

中文解释:矩阵的维数必须一致 出错原因:这是由于运算符(= + - / * 等)两边的运算对象维数不匹配造成的,典型的出错原因是错用了矩阵运算符。matlab 通过“.”来区分矩阵运算和元素运算。 解决办法:自己调试一下程序,保证运算符两边的运算对象维数一致。

4.Function definitions are not permitted at the prompt or in scripts

中文解释:不能在命令窗口或者脚本文件中定义函数 出错原因:一旦在命令窗口写 function c = myPlus(a,b),此错误就会出现,因为函数只能定义在 m 文件中。关于脚本文件和 m 文件的区别请查阅 matlab 基础书。简言之: 1) 如果你写成 function 的形式,那么必须写在 m 文件中,且以 function 开头(即 function 语句前不能包含其他语句,所有语句必须放在 function 中,当然,function 的定义可以有多个,各 function 之间是并列关系,不能嵌套);, 2) 如果你写成脚本的形式,则既可以写在命令窗口中,也可以写在 m 文件中,但两者均不能包含 function 语句(即不能进行函数的定义) 解决办法:新建一个 m 文件,然后再进行函数的定义

5.One or more output arguments not assigned during call to ”…”

中文解释:在调用…函数过程中,一个或多个输出变量没有被赋值 出错原因:函数如果带有输出变量,则每个输出在返回的时候都必须被赋值。容易出现这个错误的两个地方是:在部分条件判断语句(如 if )中没有考虑到输出变量的返回值。 在循环迭代过程中部分变量的维数发生了变化。 解决办法:调试程序,仔细查看函数返回时各输出变量的值。更好的方法是:在条件判断或者执行循环之前对所使用的变量赋初值。

6.Index exceeds matrix dimensions.

中文解释:索引超出矩阵的范围 出错原因:在引用矩阵元素的时候,索引值超出矩阵应有的范围 解决办法:检查所定义数组的维数,和引用的范围。

7.In an assignment A(I) = B, the number of elements in B and I must be the same

中文解释:在赋值语句 A(I) = B 中,B 和 I 的元素个数必须相同 出错原因:I 和 B 的维数、大小不一样。这正如“把 5 个水果放到 6 个篮子”、或者“把 6 个水果放到 5 个篮子”,均无法实现 解决办法:自己设置断点调试一下,看看 I 和 B 的维数、大小是否相同,不同的话就要修改成两者一致

异常(exception) MException 捕获异常信息类

Matlab提供了一个MException类来保存执行代码时捕获到的错误信息。当发现错误时,Matlab即生成一个MException类对象,该对象具有以下属性和函数。

属性:

identifier:为一个字符串,每一个错误对应一个identifier,其至少包含两个用分号“:”隔开的子串,主要形式为COMPONENT:MNEMONIC。 message:为一个字符串,主要用于向用户反馈错误信息。 stack:用于保存各个m文件之间调用的栈关系 cause:造成错误的MExceptions所组成的元包阵列Cell Array。

函数:

throw():将错误信息在命令窗口command window上输出,并终止程序的执行。

例如:将错误信息在命令窗口command window上输出,并终止程序的执行。其在命令窗口输出的是错误对象的message属性。 在这里插入图片描述

rethrow():将已经捕获的错误重新在命令窗口command window上输出,并终止程序的执行。

例如:将已经捕获的错误重新在命令窗口command window上输出,并终止程序的执行。利用该函数可以将上面的ErrorInfo重新抛出一次。

在这里插入图片描述

throwAsCaller():用调用函数的方式将错误信息在命令窗口command window上输出。

例如:用调用函数的方式将错误信息在命令窗口command window上输出。利用该函数采用调用函数的形式将错误信息在命令窗口command window上输出。

在这里插入图片描述

addCause():将两个MException错误信息进行叠加,并返回一个新的MException对象,该对象包含了被叠加的两个MException对象的错误信息。

将两个MException错误信息进行叠加,并返回一个新的MException对象,该对象包含了被叠加的两个MException对象的错误信息。

如下所示,cause1_ME表示矩阵越界访问错误,cause2_ME表示不存在这样的文件时仍然load的错误。然后通过将这两种错误信息进行叠加,具体效果如下图所示。

在这里插入图片描述

getReport():获取错误信息的message属性并返回。 在这里插入图片描述last():返回最新的一个未被捕获的错误信息。

返回最新的一个未被捕获的错误信息。如下所示,ErrorInfo是之前捕获的错误信息,然后重新制造一个matlab错误(越界访问矩阵),并且该错误并没有被matlab捕获到一个MException对象中,因此可以用该函数返回最新的一个未被捕获的错误信息。 在这里插入图片描述

断言(assert)

由于要求对参数的保护,需要对输入参数或处理过程中的一些状态进行判断,判断程序能否/是否需要继续执行。在matlab中经常使用到这样的代码:

if c=0, ['c = ' num2str(c) '


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有