在 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
(尽管默认消息本身应该相当清楚)。
但是,如果您有两个以上的输出,并且您不知道哪个可能没有被正确定义,那么要让它工作就不会简单了。如果第一个输出没有定义,这根本行不通。在那种情况下,我认为您必须编辑函数本身。
如果特定用例正在检查一堆学生代码,这些代码都接受相同的输入并提供相同的输出,另一种选择是为他们提供一个函数模板,如果输出存在,如果不存在,则将它们设置为空并显示您的自定义消息。
我希望在 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
(尽管默认消息本身应该相当清楚)。
但是,如果您有两个以上的输出,并且您不知道哪个可能没有被正确定义,那么要让它工作就不会简单了。如果第一个输出没有定义,这根本行不通。在那种情况下,我认为您必须编辑函数本身。
如果特定用例正在检查一堆学生代码,这些代码都接受相同的输入并提供相同的输出,另一种选择是为他们提供一个函数模板,如果输出存在,如果不存在,则将它们设置为空并显示您的自定义消息。