Main Content

throwAsCaller

호출하는 함수 내에서 발생하는 것처럼 예외 발생시키기

설명

예제

참고

R2022b: throwAsCaller보다는 throw가 권장됩니다. 이 함수는 MATLAB®이 함수를 호출하는 위치에서 스택 추적을 생성하기 때문입니다.

throwAsCaller(exception)은 호출 함수 내에서 발생하는 것처럼 예외를 발생시킵니다. 예외는 현재 실행 중인 함수를 종료하고 키보드 또는 catch 블록으로 컨트롤을 반환합니다. try/catch 문 밖에서 예외를 발생시킬 경우 MATLAB은 명령 창에 오류 메시지를 표시합니다.

try/catch 문이나 MException.last 함수를 통해 MException 객체에 액세스할 수 있습니다.

경우에 따라, 오류는 실제로 예외를 발생시키는 함수를 가리키는 것보다, 호출 함수에서 예외의 원인이 되는 위치를 가리키는 것이 더 유용합니다. throwAsCaller를 사용하여 오류 표시를 단순화할 수 있습니다.

예제

모두 축소

작업 폴더에 함수 sayHello를 만듭니다.

function sayHello(N)
checkInput(N)
str = ['Hello, ' N '!'];
disp(str)

function checkInput(N)
if ~ischar(N)
    ME = MException('sayHello:inputError','Input must be char.');
    throw(ME)
end

명령 프롬프트에서 숫자형 입력값으로 함수를 호출합니다.

sayHello(42)
Error using sayHello>checkInput
Input must be char.

Error in sayHello
checkInput(N)

스택 맨 위는 MATLAB이 예외를 발생시킨 라인이 9임을 나타냅니다. 처음 스택 프레임 후에 MATLAB은 호출 함수에서 받은 정보를 표시합니다.

sayHello.m의 라인 9에서 throw(ME)throwAsCaller(ME)로 바꾸고 함수를 다시 호출합니다.

sayHello(42)
Error using sayHello
Input must be char.

스택 맨 위는 호출 함수에서의 오류 위치가 라인 2임을 나타냅니다.

입력 인수

모두 축소

오류의 원인과 위치를 포함하는 예외로, 스칼라 MException 객체로 지정됩니다.

확장 기능

스레드 기반 환경
MATLAB®의 backgroundPool을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool을 사용해 코드 실행 속도를 높일 수 있습니다.

버전 내역

R2007b에 개발됨