Suggest Fix for MATLAB Exception
当MATLAB代码在运行的过程中遇到错误时,软件会抛出警告并中断程序,有时候进一步地给出一些解决的suggestion。例如,假如我们想要使用clc
命令清理命令行窗口,但是误把命令输为ckccc
,结果MATLAB就会报错:
但是如果我们误输入为与clc
相近的ckc
时,MATLAB就会在报错的同时给出一个suggestion:
实际上我们在编程的时候也可以针对指定的错误提供suggestion,这需要用到MException
对象的addCorrection
方法向MException
对象中添加correction对象,然后再将MExcption
对象rethrow
或者throw
出来(使用rethrow
或者throw
取决于在我们处理错误之前程序是否报错)。
addCorr ection
函数的功能是:provide suggested fix for exception,官方文档提供了一个示例:Suggest Fix When Function Called Without Arguments。
首先定义一个hello
函数:
1
2
3
function hello(audience)
fprintf("Hello, %s!\n", audience);
end
该函数接受一个输入参数,并在命令行窗口打印欢迎语句,例如:
1
2
>> hello("Tommy")
Hello, Tommy!
如果我们不输入参数,则程序会报错:
1
2
3
4
5
>> hello
Not enough input arguments.
Error in hello (line 8)
fprintf("Hello, %s!\n", audience);
我们可以使用下面的程序对这个错误给出解决建议:
1
2
3
4
5
6
7
8
9
10
function hello(audience)
if nargin < 1
me = MException('MATLAB:notEnoughInputs', 'Not enough input arguments.');
aac = matlab.lang.correction.AppendArgumentsCorrection('"world"');
me = me.addCorrection(aac);
throw(me);
end
fprintf("Hello, %s!\n", audience);
end
此时再调用没有参数的hello
函数,程序就会给出suggestion:
1
2
3
4
5
6
>> hello
Error using hello
Not enough input arguments.
Did you mean:
>> hello("world")
可以看到,程序使用MException
类型变量me
的addCorrection
方法将变量acc
添加到建立的me
中。这里的变量acc
是一个AppendArgumentsCorrection
类型的对象,是matlab.lang.correction
库专门提供的用于为error(更准确地说是Exception)提供suggestion的对象。除此之外,类似的对象还有两个,分别是:
matlab.lang.correction.ConvertToFunctionNotationCorrection
matlab.lang.correction.ReplaceIdentifierCorrection