이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
MException
오류 정보 캡처
설명
오류를 감지하고 예외를 발생시키는 모든 MATLAB® 코드는 MException
객체를 생성합니다. MException
객체는 오류에 대해 가져올 수 있는 정보를 포함합니다. MATLAB은 미리 정의된 예외나 미리 생성해 둔 예외를 발생시킬 수 있습니다.
생성
설명
입력 인수
errID
— 오류 ID
문자형 벡터 | string형 스칼라
오류 ID로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 예외 처리에 오류 ID를 사용하여 오류의 원인을 보다 효율적으로 식별하거나 프로그램에서 선택한 예외 서브셋을 제어할 수 있습니다.
오류 ID는 하나 이상의 구성요소 필드와 하나의 니모닉 필드를 포함합니다. 필드는 콜론으로 구분되어야 합니다. 예를 들어, 구성요소 필드 component
와 니모닉 필드 mnemonic
을 갖는 오류 ID는 'component:mnemonic'
으로 지정됩니다.
구성요소 필드는 일반적으로 다양한 오류가 발생할 수 있는 제품 또는 기능을 지정합니다. 예를 들어, 오류 ID
'MATLAB:TooManyInputs'
는 구성요소 필드MATLAB
을 갖습니다. 이는 예외가 MATLAB에서 발생됨을 의미합니다. 앞에 다른 구성요소를 지정하기만 하면 동일한 니모닉TooManyInputs
를 사용할 수 있습니다. 예를 들어, 함수가 너무 많은 입력값과 함께 호출될 때마다 툴박스에서 오류를 발생시키려면'MyToolbox:TooManyInputs'
를 사용할 수 있습니다.오류 ID의 니모닉 필드는 보통 해당 오류 문제에만 적용되는 태그입니다. 예를 들어, MATLAB에서 모호한 구문을 사용하여 발생한 오류를 보고할 때는 오류 ID를
'MATLAB:ambiguousSyntax'
로 지정할 수 있습니다.
구성요소 필드와 니모닉 필드는 각각 영문자로 시작해야 합니다. 나머지 문자는 영숫자(A–Z, a–z, 0–9)나 밑줄일 수 있습니다. errID
에는 공백 문자를 사용할 수 없습니다.
예: 'MyComponent:noSuchVariable'
예: 'Simulink:Signals:InvalidNumberOfPorts'
msgtext
— 오류 원인에 대한 정보
문자형 벡터 | string형 스칼라
오류 원인과 오류를 해결할 수 있는 방법에 대한 정보로, 문자형 벡터나 string형 스칼라로 지정됩니다. 텍스트의 형식을 지정하려면 \t
, \n
등의 이스케이프 시퀀스를 사용하십시오. sprintf
함수가 지원하는 형식 지정자(예: %s
또는 %d
)를 사용할 수도 있습니다. A1,...,An
입력 인수를 사용하여 변환 지정자의 값을 지정합니다.
예: 'Error opening file.'
예: 'Error on line %d.'
A1,...,An
— 값
문자형 벡터 | string형 스칼라 | 숫자형 스칼라
msgtext
의 변환 지정자를 대체하는 값으로, 각각 문자형 벡터, string형 스칼라 또는 숫자형 스칼라로 지정됩니다.
속성
identifier
— 고유한 오류 ID
문자형 벡터
읽기 전용 속성입니다.
오류를 고유하게 식별하는 문자형 벡터로, 입력 인수 errID
의 문자형 벡터로부터 지정됩니다.
예: 'MATLAB:test'
message
— 오류 메시지
문자형 벡터
읽기 전용 속성입니다.
MATLAB이 예외를 발생시킬 때 표시하는 오류 메시지가 담긴 문자형 벡터로, msgtext
와 A1,...,An
입력 인수로 지정됩니다.
예: 'Variable x not found'
stack
— 스택 추적 정보
구조체형 배열
읽기 전용 속성입니다.
MATLAB이 예외를 발생시키는 파일 이름(file
), 함수 이름(name
), 라인 번호(line
)를 포함한 스택 추적 정보가 포함된 구조체형 배열입니다. 호출된 함수에서 오류가 발생할 경우 stack
속성에는 호출된 각 함수에 대해 파일 이름, 함수 이름, 라인 번호가 포함됩니다. MATLAB은 예외를 발생시킬 때만 스택을 생성합니다.
stack
은 N×1 struct
배열입니다. 여기서 N은 호출 스택의 깊이를 나타냅니다.
cause
— 예외의 원인
MException
객체로 구성된 셀형 배열
읽기 전용 속성입니다.
MATLAB에 예외를 발생시킨 원인이 되는 MException
객체로 구성된 셀형 배열입니다. cause
속성에 예외를 추가하려면 addCause
메서드를 사용하십시오.
Correction
— 예외에 대한 제안 수정 사항
matlab.lang.correction.AppendArgumentsCorrection
객체 | matlab.lang.correction.ConvertToFunctionNotationCorrection
객체 | matlab.lang.correction.ReplaceIdentifierCorrection
객체
읽기 전용 속성입니다.
예외에 대한 제안 수정 사항으로, matlab.lang.correction.AppendArgumentsCorrection
, matlab.lang.correction.ConvertToFunctionNotationCorrection
또는 matlab.lang.correction.ReplaceIdentifierCorrection
객체로 지정됩니다. 발생된 예외가 포착되지 않은 경우 MATLAB은 Correction
속성을 사용하여 이 예외에 대한 수정 사항을 제안합니다.
객체 함수
throw | 예외 발생 |
MException.last | 가장 최근 uncaught exception 반환 |
rethrow | 이전 caught exception 다시 발생 |
throwAsCaller | 호출하는 함수 내에서 발생하는 것처럼 예외 발생시키기 |
addCause | 예외의 추가적인 원인 기록 |
addCorrection | Provide suggested fix for exception |
getReport | 예외(Exception)에 대한 오류 메시지 가져오기 |
예제
MException 객체 생성
입력 오류에 대한 정보를 캡처하는 MException
객체를 만듭니다.
errID = 'myComponent:inputError'; msgtext = 'Input does not have the expected format.'; ME = MException(errID,msgtext)
ME = MException with properties: identifier: 'myComponent:inputError' message: 'Input does not have the expected format.' cause: {} stack: [0x1 struct] Correction: []
서식이 지정된 오류 메시지를 갖는 MException 생성
msgtext
입력 인수와 A1,...,An
입력 인수를 모두 사용하여 오류 메시지를 만듭니다.
errID = 'MATLAB:test'; msgtext = 'There are %d errors on this page'; A1 = 10; ME = MException(errID,msgtext,A1)
ME = MException with properties: identifier: 'MATLAB:test' message: 'There are 10 errors on this page' cause: {} stack: [0x1 struct] Correction: []
MException 객체 생성 및 발생
입력 변수 이름이 작업 공간에 존재하지 않으면 예외를 발생시킵니다.
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
객체를 생성하고 예외를 발생시킵니다.
MException 객체의 정보에 액세스하기
try, catch
를 사용하여 MException
객체에 캡처된 정보에 액세스합니다.
입력값 없는 surf
함수 호출이 포함된 파일 myfile.m
을 만듭니다. (이 함수 호출의 결과로 예외가 발생하는데, 이는 설명을 위해 일부러 그런 것입니다.) MATLAB이 MException
객체 ME
로 발생시킨 예외를 포착하고, ME
의 message
속성에 액세스하여 오류 메시지를 표시합니다.
try surf catch ME disp('Error Message:') disp(ME.message) end
Error Message: Not enough input arguments.
오류 ID를 추출합니다.
ME.identifier
ans = 'MATLAB:narginchk:notEnoughInputs'
stack
속성의 내용을 쿼리합니다. 이 예제에서 호출 스택은 2×1 구조체형 배열로 표현됩니다.
for i = 1:numel(ME.stack) ME.stack(i) end
ans = struct with fields: file: 'matlabroot\toolbox\matlab\graph3d\surf.m' name: 'surf' line: 49 ans = struct with fields: file: 'c:\myMATLABfiles\myfile.m' name: 'myfile' line: 2
stack
의 첫 번째 요소는 파일 이름(surf.m
), 함수 이름(surf
), 그리고 예외가 발생한 라인 번호(49
)를 표시합니다. stack
의 두 번째 요소는 호출자 스크립트에서 예외가 발생한 라인 번호와 이름을 표시합니다.
발생된 예외에 응답하기
존재하지 않는 함수 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
을 호출하면 그 자체로 오류가 발생합니다. 이 코드는 try
와 catch
를 사용하여 정의되지 않은 함수 예외를 포착하고 이를 경고로 다시 패키징하여 MATLAB이 다음 명령을 계속 실행할 수 있게 해 줍니다. caught exception이 다른 오류 ID를 갖는 경우 MATLAB은 예외를 다시 발생시킵니다.
확장 기능
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2007b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)