我正在寻找一种优雅的方式来使用条件try catch
语句。
我想它看起来像这样:
tryif loose==1
% Do something, like loading the user preferences
catch %Or catchif?
% Hande it
end
到目前为止,我知道您可以使用try catch
块来运行已编译的代码,但强制它在dbstop if caught error
的调试会话中停止。现在我基本上在寻找对面:
通常我希望代码在发生意外情况时停止(以保证结果的完整性)但是在调试时希望对某些事情不那么严格。
答案 0 :(得分:4)
这个怎么样:
try
% Do something, like loading the user preferences
catch exception
if loose ~= 1
rethrow(exception)
end
% Handle it
end
我不知道优雅;-),但至少它避免了“做某事”的重复。
答案 1 :(得分:1)
我知道一种方法,但我很难称之为优雅:
if loose == 1
try
% Do something, like loading the user preferences
catch
% Hande it
end
else
% Do something, like loading the user preferences
end
答案 2 :(得分:1)
我能做的最好的事情是:
try
% Do something, like loading the user preferences
catch me
errorLogger(me);
%Handle the error
end
然后
function errorLogger(me)
LOOSE = true;
%LOOSE could also be a function-defined constant, if you want multiple uses.
% (See: http://blogs.mathworks.com/loren/2006/09/13/constants/)
if LOOSE
%Log the error using a logger tool. I use java.util.logging classes,
%but I think there may be better options available.
else
rethrow(me);
end
然后,如果需要进行生产型部署,请避免像这样的常量条件检查:
function errorLogger(me)
%Error logging disabled for deployment
答案 3 :(得分:1)
对于“tryif
”功能,您可以在try块的第一行assert
:
try
assert(loose==1)
% Do something
catch err
if strcmp(err.identifier,'MATLAB:assertion:failed'),
else
% Hande error from code following assert
end
end
请注意,如果"Do something"
,则不会执行loose==1
代码。
对于“catchif
”功能,A.Donda检查loose~=1
块第一行catch
的方法似乎相当不错。