Include variable value when throwing exception

조회 수: 14 (최근 30일)
Jurgen vL
Jurgen vL 2019년 5월 21일
답변: Steven Lord 2025년 11월 7일 5:22
I have a function that throws a specific exception, and a try/catch block in a top-level function that handles it. I want to pass along the value of some variables in addition to the error message for debugging purposes. Typically cell array, string array or numerical matrix.
I'm guessing I would have to create a custom exception class for this?
Follow-up: Why is the default MException so restrictive? Is error handling like I described a bad practice?
  댓글 수: 2
Marc Youcef
Marc Youcef 2020년 3월 22일
I was looking for same thing as well. I hav objects being instantiated in a loop and when it fails I would like to know which index of instantiation failed.
Daniel
Daniel 2025년 11월 6일 15:37
편집: Daniel 2025년 11월 6일 15:38
You can subclass MException and add any custom properties to do exactly that. See my answer.

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

답변 (2개)

Daniel
Daniel 2025년 11월 6일 15:38
편집: Daniel 2025년 11월 6일 15:39
To add custom data to an exception, subclass MException and add custom properties.
classdef MyException < MException
properties
Data
end
end
Then, in code, use your custom property as so:
try
ex = MyException('root:cause', 'error message');
ex.Data = 1234;
ex.throw()
catch ME
disp(ME.Data)
end

Steven Lord
Steven Lord 2025년 11월 7일 5:22
Why not just build up the appropriate string containing the message with the information you want it to include then call error to throw an error with that message?
expectsOnlyScalar(pi)
Good, you passed in the scalar value 3.1416
expectsOnlyScalar(1:10)
Error using solution>expectsOnlyScalar (line 9)
I expected a scalar value but instead you passed in an array of size [1 10]!
function expectsOnlyScalar(x)
if isscalar(x)
disp("Good, you passed in the scalar value " + x)
else
msg = "I expected a scalar value but instead " + ...
"you passed in an array of size " + mat2str(size(x)) + "!";
error(msg)
end
end

카테고리

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

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by