matlab中的条件try catch语句

时间:2013-11-15 14:24:10

标签: matlab debugging try-catch

我正在寻找一种优雅的方式来使用条件try catch语句。

我想它看起来像这样:

tryif loose==1
% Do something, like loading the user preferences
catch %Or catchif?
% Hande it
end

到目前为止,我知道您可以使用try catch块来运行已编译的代码,但强制它在dbstop if caught error的调试会话中停止。现在我基本上在寻找对面

通常我希望代码在发生意外情况时停止(以保证结果的完整性)但是在调试时希望对某些事情不那么严格。

4 个答案:

答案 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的方法似乎相当不错。