我正在尝试执行Try / Catch语句,但没有在发生错误的行之后跳过所有行。
为了说明,我们说我们有:
A = 1;
B = 2+C; % error will be triggered on this line
D = 5; % next line to be executed after a potential error
错误将在第2行触发。但是,我希望错误不会终止脚本并继续使用第3行,依此类推。
显然,我们可以通过以下方式解决这个问题:
try A = 1; catch; end
try B = 2+C; catch; end
try D = 5; catch; end
但是,这需要我为所有行添加所有这些语句。由于我有一个超过500行代码的大文件,我想避免这种情况。有没有办法在开始时以某种方式定义条件尝试,在错误发生后继续进行下一行?
进一步评论
This answer提供了一个解决方案,可以将每个代码段放在一个函数中,并迭代函数句柄的单元格数组。这是一个带有匿名函数列表的示例:
fcnList = {@() disp('1'); ...
@() disp('2'); ...
@() error(); ... % Third function throws an error
@() disp('4')};
for fcnIndex = 1:numel(fcnList)
try
fcnList{fcnIndex}(); % Evaluate each function
catch
fprintf('Error with function %d.\n', fcnIndex); % Display when an error happens
end
end
然而,我认为在代码的每一行前面添加@()并没有任何好处,而不是简单地将它放在try(...)中;在每一行结束(后者甚至比其他答案中提出的复杂解决方案更清晰)。我真的想把它包装成那些知道它应该跳过线的东西。