我想捕获一个异常,但是打印出与未捕获(堆栈跟踪)相同的消息。该怎么做?
我尝试了
>> myfunctionwitherror
Error using myfunctionwitherror (line 3)
myerror
>> try myfunctionwitherror; catch disp(lasterror), end
Warning: This try-catch syntax will continue to work in R2007b, but may be illegal or may mean something different in future releases of MATLAB.
See MATLAB R2007a Release Notes, "Warning Generated by try-catch" for details.
MException with properties:
identifier: ''
message: 'myerror'
cause: {0×1 cell}
stack: [0×1 struct]
>> try myfunctionwitherror, catch e getReport(e), end
Warning: This try-catch syntax will continue to work in R2007b, but may be illegal or may mean something different in future releases of MATLAB.
See MATLAB R2007a Release Notes, "Warning Generated by try-catch" for details.
Undefined function or variable 'e'.
如何做到这一点?
我正在使用2016b
。我不知道为什么会出现此消息。
答案 0 :(得分:5)
You are using 2007a syntax for try catch.
是:
try,
statementA
catch,
statementB
end
现在是
try
statementA
catch e
statementB
end
但是,当您编写一个衬板时,您忘记了;
,因此您只是在混淆MATLAB有关行结束的时间,因此假设您正在做
try
myfunctionwitherror
catch
e
getReport(e)
end
使用不明确的一个衬纸时,只需将分号放在应有的位置即可。或写多行。 ;)
try; myfunctionwitherror; catch e; getReport(e); end;
如果要显示错误(不显示错误),只需
try; myfunctionwitherror; catch e; disp(e.message); end;
答案 1 :(得分:4)
在警告中单击链接时打开的documentation page语录:
尝试捕获产生的警告
为适应将来在MATLAB错误处理功能中的更改,
False
块的语法有了新的限制。当紧随try-catch
关键字的第一个MATLAB语句仅包含与try
相同的一行中的单个术语(例如A
而不是A+B
)时,那么该语句和try关键字应以逗号分隔。例如,线try
应写为
try A
或两行为
try, A
这仅影响单项陈述。例如,以下语句继续有效:
try A
对于
try A+B
关键字和该关键字后的单项语句在同一行上也是如此。 此类型的有效catch
语句应组成如下:try-catch
如果在try和/或catch之后省略逗号,则代码将继续正确运行。但是,MATLAB会发出警告:
try, A, catch, B, end
try statements, catch statements, end
Warning: This try-catch syntax will continue to work in R2007a,
but may be illegal or may mean something different in future
releases of MATLAB.
(最后的try, myfunctionwitherror, catch e, disp(e.message), end %#ok<NOCOM>
是因为尝试后的逗号{至少在R2018a}上会产生棉绒警告,因为它似乎不必要,但是没有逗号,我们会得到运行时警告...去图)