다음: 오류 잡기, 상위 문서: 오류 다루기   [차례][찾아보기]


12.1.1 오류 계기

오류의 가장 많은 쓰임은 함수에의 입력 매개변수 검사입니다. 아래 예시는 함수 f를 아무 매개변수 없이 호출하면 error 함수를 호출합니다.

function f (arg1)
  if (nargin == 0)
    error ("부족한 입력 매개변수");
  endif
endfunction

error 함수를 호출하면, 안내를 출력하고 옥타브 명령 처리기로 돌아갑니다. 이는 error가 실행되면, 이후 부호가 실행되지 않음을 의미합니다.

식별 문자열을 오류에 할당하여도 됩니다. 오류에 식별자가 있으면, 다음 절에서 기술하는 바와 같이 사용자가 오류를 잡아낼 수 있습니다. 오류에 식별자를 할당하려면,  간단히 error를 식별 문자열과 실제 오류인 문자열 두 개와 호출하면 됩니다. 오류 식별자는 "이름칸:오류-이름" 꼴입니다. 이름칸에 "Octave"을 써 넣으면 옥타브 자체 오류에 사용합니다. 이름칸에 사용자 고유의 오류에 사용하기 위하여 아무 문자열이나 넣어도 상관 없습니다.

error (, …)
error (식별자, , …)

오류 문구를 표시하고, m 기록철 실행을 멈춥니다.

틀 문자열 에 사용하는 선택 매개변수의 형식은 printf 형제에 사용하는 규칙(형식 있는 출력 참고)과 같고, stderr 흐름으로 안내를 출력합니다. 문자 문자열 ‘error: ’이 안내 앞에 접두사로 붙습니다.

error 호출은 또한 추가 명령 평가 없이 최상위로 제어권을 넘기는 등의 옥타브 내부 오류 과정을 진행합니다. 함수나 대본을 정지하는 데에 쓸만합니다.

오류 문구가 새줄 문자로 끝나지 않으면, 오류와 관련한 모든 함수 호출을 역추적하여 출력합니다. 예를 들어, 아래와 같은 함수 정의를 주면,

function f () g (); end
function g () h (); end
function h () nargin == 1 || error ("nargin != 1"); end

함수 f를 호출하면, 오류의 정확한 위치를 찾는데 도움이 되는 안내 목록을 출력합니다.

f ()
error: nargin != 1
error: 호출 위치:
error:   h 1번째 줄, 27번째 열
error:   g 1번째 줄, 15번째 열
error:   f 1번째 줄, 15번째 열

오류 문구가 새줄 문자로 끝나면, 오류 문구를 출력하기는 하지만 제어권을 최상위로 돌려주는 중에 관련한 모든 함수 호출을 역추적하여 출력하지는 않습니다. 예를 들어, 위 예시의 오류 문구가 새줄 문자로 끝나면, 오류 문구 하나만 출력합니다.

function h () nargin == 1 || error ("nargin != 1\n"); end
f ()
error: nargin != 1

error는 빈 문자열("")을 무시하며, 명령문이 무연산이면 부호를 계속 돌립니다. 매트랩과 호환합니다. 이로써 아래와 같은 부호를 적을 수도 있습니다.

err_msg = "";
if (조건 1)
  err_msg = "조건 1 확인";
elseif (조건 2)
  err_msg = "조건 2 확인";
…
endif
error (err_msg);

오류가 발생할 떄만 평가를 멈춥니다.

실행 안내: 매트랩과의 호환을 위하여 에 있는 제어 문자(예: "\n" => 새 줄)를 입력 매개변수가 두 개 이상이면, 이 홑따옴표 문자열이어도 처리합니다. 홑따옴표 문자열에서 제어 문자를 사용하지 않으려면, 왼빗금을 두 번 긋거나 (예: "\\n"), regexptranslate 함수를 사용하십시오.

같이 보기: warning, lasterror.

함수 입력에서 문제점을 찾는데에 오류를 많이들 사용하기 때문에, 간단한 입력 오류 감지 함수가 있습니다. print_usage를 호출하면,  print_usage의 함수 호출 도움말를 읽고 유용한 오류를 제공합니다. 도움말 글월이 텍스인포로 쓰였으면, 도움말의 @deftypefn 부분에 기술된 함수 원형만 있는 오류 문구를 출력할 수 있습니다. 도움말 글월이 텍스인포로 쓰이지 않았으면, 도움말 전문을 오류로 출력합니다.

아래 함수를 보십시오.

## -*- texinfo -*-
## @deftypefn {} f (@var{arg1})
## Function help text goes here…
## @end deftypefn
function f (arg1)
  if (nargin == 0)
    print_usage ();
  endif
endfunction

매개변수 없이 호출하면 아래 오류를 출력합니다.

f ()

-|  error: Invalid call to f.  Correct usage is:
-|
-|   -- f (ARG1)
-|
-|
-|  Additional help for built-in functions and operators is
-|  available in the online version of the manual.  Use the command
-|  'doc <topic>' to search the manual index.
-|
-|  Help and information about Octave is also available on the WWW
-|  at https://www.octave.org and via the help@octave.org
-|  mailing list.
print_usage ()
print_usage (이름)

함수 이름의 용법 안내를 출력합니다.

매개변수 없이 호출하면, 현재 실행한 함수에 대한 용법 안내를 출력합니다.

같이 보기: help.

beep ()

음향 출력기로 경고음을 냅니다. 또는 경고 표시를 합니다.

이 함수는 경고 문자 "\a"를 명령 처리기에 보냅니다. 사용자 구성에 따라 경고 소리가 날 수도, 경고 화면이 뜰 수도, 아니면 아무일도 없을 수도 있습니다.

같이 보기: puts, fputs, printf, fprintf.

= beep_on_error ()
옛_값 = beep_on_error (새_값)
beep_on_error (새_값, "local")

오류 출력 전에 명령 처리기에서 경고음을 낼지 결정하는 내부 변수를 조회 또는 설정합니다.

함수 안에서 "local" 선택지를 넣어 부르면, 함수와 함수가 부른 종속 절차의 변수가 지역적으로 바뀝니다. 함수가 종료되면 원래 변숫값이 되돌아옵니다.


다음: 오류 잡기, 상위 문서: 오류 다루기   [차례][찾아보기]