이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

MException

오류 정보 캡처

설명

오류를 감지하고 예외를 발생시키는 모든 MATLAB® 코드는 Mexception 객체를 생성해야 합니다. 이 클래스는 오류에 대해 가져올 수 있는 정보를 포함합니다. MATLAB은 미리 정의된 예외나 미리 생성해 둔 예외를 발생시킬 수 있습니다.

생성

설명

예제

ME = MException(msgID,msgtext)는 특정 오류에 대한 정보를 캡처해서 Mexception 객체 ME에 저장합니다. MException 객체는 메시지 ID msgID와 오류 메시지 msgtext를 사용하여 생성됩니다.

예제

ME = MException(msgID,msgtext,A1,...,An)을 사용하면 텍스트나 숫자형 값 A1,...,An을 사용하여 오류 메시지의 형식을 지정할 수 있으며, 런타임에 msgtext의 변환 지정자를 대체할 수 있습니다.

입력 인수

모두 확장

오류 ID로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 예외 처리에 메시지 ID를 사용하여 오류의 원인을 보다 효율적으로 식별하거나 프로그램에서 선택한 예외 서브셋을 제어할 수 있습니다.

메시지 ID에는 componentmnemonic이 포함됩니다. 메시지 ID는 항상 콜론과 간단한 형식을 포함해야 합니다(예: component:mnemonic). component 필드와 mnemonic 필드는 각각 문자로 시작해야 합니다. 나머지 문자는 영숫자(A–Z, a–z, 0–9)나 밑줄일 수 있습니다. msgID는 공백 문자를 포함할 수 없습니다. 자세한 내용은 메시지 ID 항목을 참조하십시오.

예: 'MyComponent:noSuchVariable'

오류 원인과 오류를 해결할 수 있는 방법에 대한 정보로, 문자형 벡터나 string형 스칼라로 지정됩니다. 텍스트의 형식을 지정하려면 \t, \n 등의 이스케이프 시퀀스를 사용하십시오. sprintf 함수가 지원하는 형식 지정자(예: %s 또는 %d)를 사용할 수도 있습니다. A1,...,An 입력 인수를 통해 변환 지정자의 값을 지정합니다. 자세한 내용은 텍스트 형식 지정하기 항목을 참조하십시오.

예: 'Error opening file.'

예: 'Error on line %d.'

msgtext의 변환 지정자를 대체하는 값으로, 문자형 벡터, string형 스칼라 또는 숫자형 스칼라로 지정됩니다.

속성

모두 확장

오류를 고유하게 식별하는 문자형 벡터로, 입력 인수 msgID의 문자형 벡터로부터 지정됩니다. 이 속성은 읽기 전용입니다. 자세한 내용은 메시지 ID 항목을 참조하십시오.

예: 'MATLAB:test'

데이터형: char

MATLAB이 예외를 발생시킬 때 표시하는 오류 메시지가 담긴 문자형 벡터로, msgtextA1,...,An 입력 인수로 지정됩니다. 이 속성은 읽기 전용입니다. 자세한 내용은 오류 메시지의 텍스트 항목을 참조하십시오.

예: 'Variable x not found'

데이터형: char

MATLAB이 예외를 발생시키는 파일 이름(file), 함수 이름(name), 라인 번호(line)를 포함한 스택 추적 정보가 포함된 구조체형 배열입니다. 호출된 함수에서 오류가 발생할 경우 stack 속성에는 호출된 각 함수에 대해 파일 이름, 함수 이름, 라인 번호가 포함됩니다. MATLAB은 예외를 발생시킬 때만 스택을 생성합니다.

stack은 Nx1 구조체형(struct) 배열입니다. 여기서 N은 호출 스택의 깊이를 나타냅니다. 이 속성은 읽기 전용입니다. 자세한 내용은 호출 스택 항목을 참조하십시오.

데이터형: struct

MATLAB에 이 예외를 발생시킨 원인이 되는 MException 객체로 구성된 셀형 배열입니다. 다른 예외의 cause 필드에 예외를 추가하려면 addCause 메서드를 사용해야 합니다. 자세한 내용은 원인 배열 항목을 참조하십시오.

이 예외에 대한 제안 수정 사항으로, matlab.lang.correction.AppendArgumentsCorrection 객체로 지정됩니다. 발생된 예외가 포착되지 않은 경우 MATLAB은 Correction 속성을 사용하여 이 예외에 대한 수정 사항을 제안합니다.

예:

객체 함수

throw예외 발생
MException.last가장 최근 uncaught exception 반환
rethrow이전 caught exception 다시 발생
throwAsCaller호출하는 함수 내에서 발생하는 것처럼 예외 발생시키기
addCause예외의 추가적인 원인 기록
addCorrectionProvide suggested fix for exception
getReport예외(Exception)에 대한 오류 메시지 가져오기

예제

모두 축소

msgID = 'myComponent:inputError';
msgtext = 'Input does not have the expected format.';

ME = MException(msgID,msgtext)
ME = 
  MException with properties:

    identifier: 'myComponent:inputError'
       message: 'Input does not have the expected format.'
         cause: {}
         stack: [0x1 struct]
    Correction: []

msgID = 'MATLAB:test';
msgtext = 'There are %d errors on this page';
A1 = 10;

ME = MException(msgID,msgtext,A1)
ME = 
  MException with properties:

    identifier: 'MATLAB:test'
       message: 'There are 10 errors on this page'
         cause: {}
         stack: [0x1 struct]
    Correction: []

입력 변수 이름이 작업 공간에 존재하지 않으면 예외를 발생시킵니다.

str = input('Type a variable name: ','s');
if ~exist(str,'var')
    ME = MException('MyComponent:noSuchVariable', ...
        'Variable %s not found',str);
    throw(ME)
end

입력 프롬프트에서 작업 공간에 존재하지 않는 변수를 입력합니다. 예를 들어, notaVariable을 입력합니다.

Variable notaVariable not found

notVariable은 작업 공간에 없으므로, MATLAB은 MException 객체를 생성하고 예외를 발생시킵니다.

존재하지 않는 함수 notaFunction을 호출하여 생성된 예외를 포착합니다. 함수가 정의되어 있지 않으면 경고를 발생시키고 출력값에 값 0을 할당합니다.

try
    a = notaFunction(5,6);
catch ME
    if strcmp(ME.identifier,'MATLAB:UndefinedFunction')
        warning('Function is undefined.  Assigning a value of 0.');
    else
        rethrow(ME)
    end
end
Warning: Function is undefined.  Assigning a value of 0. 

notaFunction을 호출하면 그 자체로 오류가 발생합니다. 이 코드는 trycatch를 사용하여 정의되지 않은 함수 예외를 포착하고 이를 경고로 다시 패키징하여 MATLAB이 다음 명령을 계속 실행할 수 있게 해 줍니다. caught exception이 다른 오류 ID를 갖는 경우 MATLAB은 예외를 다시 발생시킵니다.

R2007b에 개발됨