Matlab中assert函数的使用

目录

语法

说明

示例

值在预期范围之内

期望的数据类型

预期的代码执行情况


        assert是条件为 false 时引发错误。

语法

assert(cond)
assert(cond,msg)
assert(cond,msg,A1,...,An)
assert(cond,errID,msg)
assert(cond,errID,msg,A1,...,An)

​        断言条件,指定为有效的 MATLAB 表达式。如果 cond 为 false,assert 函数会引发错误。cond 可以包含关系运算符(例如 < 或 ==)和逻辑运算符(例如 &&、|| 或 ~)。使用逻辑运算符 and 和 or 创建复合表达式。MATLAB 按照运算符优先级规则从左至右计算复合表达式。

注意

        如果希望 MATLAB 转换错误消息中的特殊字符(例如 \t、\n、%s 和 %d),必须为 assert 指定多个输入参数。数值、字符或字符串数组。此输入参数提供与 msg 中的转换设定符相对应的值,用来替换这些转换设定符。

提示

  • 引发错误时,MATLAB 会捕获该错误的相关信息并将其存储在用作 MException 类的对象的数据结构体中。可以使用try/catch来访问异常对象中的信息。或者,如果程序由于异常而终止,并将控制权返回至命令提示符,则可以使用 MException.last

  • 如果断言失败发生在try块内,则 MATLAB 不会停止执行该程序。在本例中,MATLAB 将控件传递到catch块中。

说明

如果 cond 为 false,assert(cond) 会引发错误。

如果 cond 为 false,assert(cond,msg) 会引发错误并显示错误消息 msg。

​如果 cond 为 false,assert(cond,msg,A1,...,An) 会显示一条错误消息,其中包含格式设置转换字符,例如与 MATLAB® sprintf 函数一起使用的字符。msg 中的每个转换字符都会转换为 A1,...,An 中的一个值。

​如果cond 为 false,assert(cond,errID,msg) 会抛出错误并显示错误消息 msg,还会包含一个标示此异常的错误标识符。此标识符可用于区分错误,它还允许您控制在 MATLAB 遇到错误时系统做何反应。

assert(cond,errID,msg,A1,...,An) 会显示格式化的错误消息,还会包含标示异常的错误标识符。

示例

值在预期范围之内

        断言值 x 大于指定的最小值。

minVal = 7;
x = 26;

assert(minVal < x)

        表达式的计算结果为 true,断言通过。断言 x 的值介于指定的最小值和最大值之间。

maxVal = 13;

assert((minVal < x) && (x < maxVal))
Assertion failed.

        表达式的计算结果为 false。断言失败,MATLAB 引发错误。

期望的数据类型

        断言两个数字的乘积为双精度值。

a = 13;
b = single(42);
c = a*b;

assert(isa(c,'double'),'Product is not type double.')
Product is not type double.

        增强错误消息以便显示c的数据类型。

assert(isa(c,'double'),'Product is type %s, not double.',class(c))
Product is type single, not double.

预期的代码执行情况

        使用assert函数测试在正常的代码执行情况下不应出现的情况。如果系数为数值,计算的根也应为数值。使用指定系数和计算根的二次方程计算结果应为零。

function x = quadraticSolver(C)

validateattributes(C,{'numeric'},{'size',[1 3]})

a = C(1);
b = C(2);
c = C(3);

x(1) = (-b+sqrt(b^2-4*a*c))/(2*a);
x(2) = (-b-sqrt(b^2-4*a*c))/(2*a);
assert(isnumeric(x),'quadraticSolver:nonnumericRoots',...
    'Computed roots are not numeric')

y1 = a*x(1)^2+b*x(1)+c;
y2 = a*x(2)^2+b*x(2)+c;
assert(y1 == 0,'quadraticSolver:root1Error','Error in first root')
assert(isequal(y2,0),'quadraticSolver:root2Error','Error in second root')

end

猜你喜欢

转载自blog.csdn.net/jk_101/article/details/111032630