Matlab 优化异常处理的错误显示:弹窗显示错误以及显示错误代码的具体位置
Matlab 异常处理,如果catch语句用disp(ME.message);
,只会打印错误信息,不会显示报错位置,无法直接跳转到代码出错位置,也不方便确定代码错误的具体原因,这在Debug的时候并不方便
1 2 3 4 5 6 7 8
| try a = 1:5; c = a(6); catch ME fprintf(2,'%s\n', ME.message); end
|
为此,下面代码进行了改进。捕捉到错误后,会弹窗提示错误,并且会在命令行显示详细的错误。
这种优化,个人觉得会非常好用,既适合用在Matlab 脚本里,也适合放在Matlab 写的APP程序里。APP使用异常处理机制,能避免出现报错后,影响APP其他按钮的功能执行,又能通过弹窗提示和命令行显示,告知错误位置。
1 2 3 4 5 6 7 8 9 10
| try a = 1:5; c = a(6); catch ME errordlg(ME.message, 'Error'); fprintf(2,'%s\n', ME.getReport('extended')); end
|
如果你觉得命令行直接显示错误,不太好,会吓到用户,以及会把命令行正常的输出都淹没了。其实Matlab还支持把错误给折叠起来,命令行点击报错链接,才显示错误的具体内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| try a = 1:5; c = a(6); catch ME errordlg(ME.message, 'Error'); reportError(ME); end
function reportError(ME) errorReport = ME.getReport('extended'); errorReport = matlab.net.base64encode(unicode2native(errorReport, 'UTF-8')); errLink = ['<a href ="matlab:fprintf(2,''\n%s\n'', '... 'native2unicode(matlab.net.base64decode(''' errorReport '''),''UTF-8''));">'... 'View detailed error information</a>.']; clcLink = '<a href ="matlab:clc">Clear command window</a>.'; fprintf(2,'%s\n', ME.message); fprintf(2,'%s %s\n' ,errLink,clcLink); end
|
为什么能折叠错误,点击后能展开错误,背后的原理见:Matlab 优化异常处理:fprintf的妙用