在我的matlab脚本中,我发送一封邮件给我,但有异常告诉我,当发生错误时,会出现哪种错误。
我面临的问题是,ME异常并没有向我显示错误发生的位置(代码的哪一行和代码的哪一部分)通常都是如此。我也看不到matlab终端中的错误(程序停止运行)。发送带有错误的邮件的代码如下:
try
% my script which can fail....
demo
catch ME
% An error will put here.
errorMessage = sprintf('Error in demo. The error is: %s', ME.message);
%this function just sends the mail
sendmail2me(errorMessage);
我错过了什么?
答案 0 :(得分:2)
异常ME
是一个MException对象,其中包含identifier
,message
,cause
和stack
。 identifier
仅允许MATLAB对错误进行唯一标识。 message
包含错误说明。
cause
包含导致当前异常的MExceptions数组。这允许您跟踪异常以查找错误的根。由于cause
是一个(可能是空的)MException对象数组,您可以遍历数组中的cause
并将信息写入邮件。
最重要的是stack
。它是一个包含三个字段的结构:file
,name
和line
。 File是发生错误的文件/函数的完整路径。名称(显然)是文件的名称,并且(显然)保存了发生异常的行。如果在从函数/脚本调用的函数中发生错误,则stack
也可以是数组。因此,最好在for循环中查看stack
,并连接错误消息和堆栈内容。
try
demo;
catch ME
errormsg = sprintf('%s\n',ME.message);
for k=1:length(ME.stack)
errormsg = sprintf('%s\nError in %s (line %d)\n', ...
errormsg,ME.stack(k).name,ME.stack(k).line);
end
sendmail2me(errormsg);
end
您可以在MATLAB help pages中找到有关例外的更多详细信息。