Why my error handling function not working for multiple outputs?

조회 수: 1 (최근 30일)
Atanu
Atanu 2022년 12월 23일
편집: Stephen23 2022년 12월 23일
I am using arrayfun with multiple outputs as following.
[entryTime,exitTime] = arrayfun(@(id) entryExitTimeStampFun(id), ...
input_data.id(startRow:endRow),'ErrorHandler', ...
@entryExitTimeStampErrorHandler);
I have written a entryExitTimeStampErrorHandler.m function in the same folder as entryExitTimeStampFun.m as follows
function [entryTime,exitTime] = entryExitTimeStampErrorHandler
entryTime = nan;
exitTime = nan;
end
entryExitTimeStampFun.m fetches data from a database corresponding to the input id. But it fails for the cases where the data is now deleted in the database corresponding to that id.
It worked fine for me with missing id's for a single output using this following code.
logicalOutput = arrayfun(@(id) passingCentralZone(id,0.5), ...
input_data.id(startRow:endRow),'UniformOutput', false, 'ErrorHandler',@(varargin) false);
So I am afraid something is wrong with my errorhandling function.

채택된 답변

Stephen23
Stephen23 2022년 12월 23일
편집: Stephen23 2022년 12월 23일
"Why my error handling function not working for multiple outputs?"
The problem has nothing to do with the two outputs, the problem is the inputs... namely that your function does not have any, even though the ARRAYFUN() documentation clearly states that "The first input argument of the error handler is a structure ... The remaining input arguments to the error handler are the input arguments for the call to func that made func throw the error." So it states very clearly, that inputs will be supplied to the function when it is called. The error handler example in the ARRAYFUN() documentation also show VARARGIN being used to collect all of those input arguments:
I already explained this and showed fully working examples in a comment to your earlier question:
For some reason you decided to ignore the documentation (and my examples) and remove the input arguments.
Result: errors.
Solution: accept the input arguments that the documentation specifies:
function [entryTime,exitTime] = entryExitTimeStampErrorHandler(varargin)
% ^^^^^^^^ You need this.
% why did you remove it?
PS: note that (also as explained in my previous answer) your error handler function could be reduced to this:
erf = @(varargin) deal(NaN);
  댓글 수: 1
Atanu
Atanu 2022년 12월 23일
Yes, I just figured it out. And it solved the problem. I was trying with input 'id' in place of 'varargin' earlier, but it gave me a yellow flag. So I removed all inputs. Thanks again for help with the same problem. Now I am using this following with the errorhandling function as you mentioned.
[entryTime,exitTime] = arrayfun(@(id) entryExitTimeStampFun(id), ...
input_data.id(startRow:endRow),'UniformOutput',false,'ErrorHandler', ...
@entryExitTimeStampErrorHandler);

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by