Octave가 오류를 보고하는 방식
Octave가 오류를 보고하는 방식
Octave는 잘못된 프로그램에 대해 두 종류의 오류를 보고해요. 하나는 입력을 이해하지 못했을 때 나는 구문 오류(parse error), 다른 하나는 프로그램이 실행되는 중에 발생하는 **실행 시 오류(run-time error)**예요. 오류 메시지를 읽으면 무엇이 잘못됐는지 상당히 구체적으로 알 수 있답니다.
출처: 문서
본문
Octave는 잘못된 프로그램에 대해 두 종류의 오류를 보고해요.
구문 오류 (Parse Error)
입력한 내용을 Octave가 이해하지 못하면 구문 오류가 발생해요. 예를 들어 키워드를 잘못 입력하면,
octave:13> function z = f (x, y) z = x ||| 2; endfunction
Octave는 즉시 이런 메시지로 응답해요.
parse error:
syntax error
>>> function z = f (x, y) z = x ||| y; endfunction
^
대부분의 구문 오류에서 Octave는 캐럿(^) 기호로 입력을 해석하지 못한 지점을 표시해요. 이 경우에는 논리합 연산자(||)의 키워드를 잘못 입력했기 때문에 오류 메시지가 생겼어요. 앞부분 코드는 올바르지만 마지막 |를 이해하지 못했기 때문에 세 번째 |에 오류 지점을 표시한 거예요.
실행 시 오류 (Run-Time Error)
또 다른 종류의 메시지는 평가 시점에 발생해요. 이런 오류를 실행 시 오류(run-time error) 또는 평가 오류(evaluation error)라고 해요. 프로그램이 실제로 실행되는 중에 생기기 때문이죠. 앞서 만든 함수 정의에서 실수를 고친 뒤에 다시 실행하면,
octave:13> f ()
Octave는 이렇게 응답해요.
error: `x' undefined near line 1 column 24
error: called from:
error: f at line 1, column 22
이 메시지는 여러 부분으로 나뉘고, 오류의 원인을 찾는 데 꽤 많은 정보를 제공해요. 메시지는 가장 안쪽 오류 지점부터 생성되며, 감싸고 있는 표현식과 함수 호출의 역추적(traceback)을 제공해요.
위 예에서 첫 줄은 어떤 함수나 표현식의 1번 줄 24번째 열 근처에서 변수 x가 정의되지 않았다는 뜻이에요. 함수 안에서 발생한 오류는 그 함수 정의가 담긴 파일의 시작부터 줄 번호를 세요. 감싸는 함수 밖에서 발생한 오류라면 줄 번호는 입력 줄 번호를 나타내며, 보통 기본 프롬프트 문자열에 표시돼요.
두 번째와 세 번째 줄은 오류가 함수 f 안에서 발생했다는 의미예요. 만약 f가 다른 함수(예를 들어 g) 안에서 호출됐다면, 오류 목록 끝에 한 줄이 더 붙었을 거예요.
error: g at line 1, column 17
이런 함수 호출 목록 덕분에 오류가 발생하기 전에 프로그램이 거쳐 온 경로를 비교적 쉽게 추적해서, 다시 시도하기 전에 오류를 고칠 수 있어요.
더 알아보기
- 오류 메시지가 화면에 어떻게 표시되는지는 Error Messages 절을 참고하세요.
- 프로그램에서 오류를 직접 일으키고 처리하는 방법은 Error Handling 항목에서 다뤄요.