오류가 발생하면, 시행문에 기술된
try문으로 오류를 탐지하고 처리할 수 있습니다. 예를 들어, 아래 for 반복문 동안 발생한
오류 횟수를 세는 부호 일부분입니다.
number_of_errors = 0;
for n = 1:100
try
…
catch
number_of_errors++;
end_try_catch
endfor
위 예시는 모든 오류를 같은 방식으로 처리합니다. 그러나 많은 경우에 오류를 구분하여 오류에 따라 다른 조치를 취하여야 합니다. lasterror
함수가 마지막으로 발생한 오류에 대한 정보를 담은 구조체를 반환합니다. 예를 들어, 위 부호에서 ‘*’ 연산자 관련
오류만 골라 셀 수 있습니다.
number_of_errors = 0;
for n = 1:100
try
…
catch
msg = lasterror.message;
if (strfind (msg, "operator *"))
number_of_errors++;
endif
end_try_catch
endfor
아니면 아래 예시에서 오류를 경고로 재지정하는 것처럼 lasterror 함수의 출력을 catch
예약어에 덧붙은 변수에서 찾아도 됩니다.
try … catch err warning(err.identifier, err.message); … end_try_catch
마지막 오류 문구 구조체를 조회 또는 설정합니다.
매개변수 없이 호출하면, 마지막 오류 문구와 그 오류와 관련한 정보를 담은 구조체를 반환합니다. 다음은 구조체 원소입니다.
message오류 문구글입니다.
identifier오류 문구의 안내 식별자입니다.
stack구조체는 오류 문구가 나온 곳에 대한 정보를 담습니다. 정보를 못 구하면 빈 구조체가 됩니다. 이 구조체의 기록란입니다.
file오류가 발생한 기록철 이름입니다.
name오류가 발생한 함수 이름입니다.
line오류가 발생한 줄 번호입니다.
column오류가 발생한 행 번호로써 선택 기록란입니다.
오류에 스칼라 구조체를 넣어 마지막 오류 구조체를 설정할 수 있습니다. err 기록란과 위에 열거한 기록란 중 일치하는 모든 기록란을 err 기록란으로 설정하고, 일치하는 오류 기록란이 없는 기록란은 기본값으로 초기화합니다.
lasterror를 매개변수 "reset"와 호출하면, 모든 기록란을
기본값으로 설정합니다.
마지막 오류 문구를 조회 또는 설정합니다.
매개변수 없이 호출하면, 마지막 오류 문구와 안내 식별자를 반환합니다.
매개변수 한 개와 호출하면, 마지막 오류 문구를 안내로 설정합니다.
매개변수 두 개와 호출하면, 마지막 오류 문구를 안내로, 오류 문구 식별자를 안내_식별자로 설정합니다.
다음 예시는 색인 오류 횟수를 셉니다. 함수 lasterror가 반환하는 구조체의 identifier 기록란으로
오류를 잡습니다.
number_of_errors = 0;
for n = 1:100
try
…
catch
id = lasterror.identifier;
if (strcmp (id, "Octave:invalid-indexing"))
number_of_errors++;
endif
end_try_catch
endfor
옥타브와 함께 배포한 함수는 아래 문제를 일으킬 가능성이 있습니다.
Octave:invalid-context호출한 유효 범위 안에서 명령을 실행할 수 없으면 생기는 오류입니다. 예를 들어, 옥타브 명령 처리기에서 함수
print_usage ()를 호출하면 이 오류가 발생합니다.
Octave:invalid-input-arg잘못된 입력 매개변수로 함수를 호출하면 생깁니다.
Octave:invalid-fun-call잘못된 매개변수 개수 등 함수 호출 방법이 잘못되면 생깁니다.
Octave:invalid-indexing자료형을 잘못 색인하면 생깁니다. 예를 드어, 배열에 실수값 색인을 한다던가 구조체에 없는 기록란을 참조하는 경우입니다.
Octave:bad-alloc막기억장치에 할당할 수 없으면 생깁니다.
Octave:undefined-function정의하지 않은 함수를 호출하면 생깁니다. 함수가 존재하더라도 검색 경로에서 못 찾은 것일 수도 있습니다.
오류를 처리하고 나면, 다시 오류를 재현하는 것도 가능합니다. 이는 오류를 잡으면서도 풀그림을 멈출 필요가 있을 때 유용합니다. rethrow
함수를 사용합니다. 이전 예시를 고쳐 ‘*’ 연산자 오류 횟수를 세면서, 다른 종류의 오류에도 작업을 멈추게
만들었습니다.
number_of_errors = 0;
for n = 1:100
try
…
catch
msg = lasterror.message;
if (strfind (msg, "operator *"))
number_of_errors++;
else
rethrow (lasterror);
endif
end_try_catch
endfor
오류에 정의한 이전 오류를 다시 보여줍니다.
오류는 적어도 반드시 "message"과 "identifier"
기록란이 있는 구조체이어야 합니다. 오류에서 추측되는 오류 위치에 관한 정보를 기록란
"stack"에 넣을 수 있습니다. 보통 오류는 lasterror가
반환합니다.
체제 기반 변수 번호를 조회 또는 설정합니다.
매개변수 없이 호출하면, 현재 오류 번호 값을 반환합니다.
수치값 값과 호출하면, 현재 오류 번호 값을 지정한 값으로 설정합니다. 설정하기 전 오류 번호 값은 오류에 반환합니다.
문자 문자열 이름과 호출하면, 지정한 오류 부호에 맞는 수치값 오류 번호를 반환합니다. 이름이 오류 부호가 아니면, -1을 반환합니다.
같이 보기: errno_list.
체제 기반 변수 번호 값 여러 개를 담은 구조체를 반환합니다.
같이 보기: errno.