在 Matlab 中防止 "MATLAB:unassignedOutputs"

Preventing "MATLAB:unassignedOutputs" in Matlab

我希望在 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(尽管默认消息本身应该相当清楚)。

但是,如果您有两个以上的输出,并且您不知道哪个可能没有被正确定义,那么要让它工作就不会简单了。如果第一个输出没有定义,这根本行不通。在那种情况下,我认为您必须编辑函数本身。

如果特定用例正在检查一堆学生代码,这些代码都接受相同的输入并提供相同的输出,另一种选择是为他们提供一个函数模板,如果输出存在,​​如果不存在,则将它们设置为空并显示您的自定义消息。