2015-01-26 118 views
0

我正在寻找并捕捉并处理Matlab中的“unassignedOuputs”错误。更具体地讲,在看下面的代码:在Matlab中防止“MATLAB:unassignedOutputs”

try 
    [out1,out2]= somefunction(in1,in2); 
catch err 
    if strcmp(err.identifier,'MATLAB:unassignedOutputs') 
     <some code> 
    else 
     rethrow(err); 
    end 
end 

如果“somefunction”不分配OUT2,并抓住所产生的误差,是否有可能以某种方式获取输出从功能上休息(在这种情况下OUT1 )?如果没有,有没有办法重新调用函数忽略该值,所以函数不会抛出错误?

+0

你想做什么?通常使用nargout解决这些问题。 – Daniel 2015-01-26 23:10:52

+0

我试图从本质上检查我调用的函数(上面例子中的“somefunction”)是否定义了它需要的所有输出。如果没有,我想继续运行该功能,收集所有其他输出,并确定哪些输出未正确分配。 – user3312395 2015-01-27 03:27:00

+0

然后用nargout得到输出的数量 – Daniel 2015-01-27 10:38:29

回答

1

据我所知,没有办法检索变量,一旦函数被终止此错误。因为当第一产生输出的情况下,但不是第二个,你可以只用一个输出,天真地像重试:

try 
    [out1,out2]= somefunction(in1,in2); 
catch err 
    if strcmp(err.identifier,'MATLAB:unassignedOutputs') 
     try 
      out2 = []; 
      out1 = somefunction(in1, in2); 
     catch err2 
      % rethrow original error 
      rethrow(err) 
     end 
    else 
     rethrow(err); 
    end 
end 

要显示其输出没有被分配给一个消息说,你” d必须解析err.message(尽管默认消息本身应该合理清晰)。

但是,如果你有两个以上的输出,并且你不知道哪些可能没有被正确定义,那么得到这个工作并不简单。如果第一个输出没有定义,这根本就不起作用。在这种情况下,我认为,必须编辑函数本身。

如果具体使用案例是检查一组学生代码,它们都采用相同的输入并提供相同的输出,另一种选择是向他们提供一个函数模板,该模板最后包含一个检查,如果输出存在,如果没有将它们设置为空并显示您的自定义消息。

+0

我担心可能没有办法用多个输出来做到这一点。感谢您的详细解答。 – user3312395 2015-01-28 17:11:30