오류가 발생하면, 시행문에 기술된
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.