我正在寻找捕捉和处理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/

10-12 22:10