我正在寻找捕捉和处理Matlab中的“unassignedOuputs”错误。更具体地说,请看下面的代码:
try
[out1,out2]= somefunction(in1,in2);
catch err
if strcmp(err.identifier,'MATLAB:unassignedOutputs')
<some code>
else
rethrow(err);
end
end
如果“somefunction”未分配out2并捕获了导致的错误,是否有可能以某种方式从函数中检索其余输出(在这种情况下为out1)?如果不是,是否有一种方法可以忽略该值而重新调用该函数,以使该函数不会引发错误?
最佳答案
据我所知,一旦函数因此错误而终止,就无法检索变量。对于产生第一个输出但不产生第二个输出的情况,您可以仅使用一个输出重试它,就像这样:
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
要显示一条消息,指出未分配哪个输出,您必须解析
err.message
(尽管默认消息本身应该相当清晰)。但是,如果您有两个以上的输出,并且您不知道哪些可能未正确定义,那么使此功能正常工作将不是一件容易的事。而且,如果未定义第一个输出,则根本无法使用。在这种情况下,我认为您必须编辑函数本身。
如果特定用例正在检查一堆学生代码,这些代码都具有相同的输入并提供相同的输出,则另一种选择是为他们提供一个功能模板,该模板最后包含检查输出是否存在以及是否存在输出。不会将它们设置为空并显示您的自定义消息。
关于matlab - 在Matlab中防止 “MATLAB:unassignedOutputs”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28160309/