11. 에러 레퍼런스
에러 레퍼런스
Section titled “에러 레퍼런스”달빛약속 코드를 실행할 때 발생할 수 있는 에러 목록입니다. 모든 에러는 YaksokError를 상속하며, @dalbit-yaksok/core에서 가져올 수 있습니다.
import { NotDefinedIdentifierError } from '@dalbit-yaksok/core'문법 및 파싱 에러
Section titled “문법 및 파싱 에러”코드 구조에 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
CannotParseError |
"..."는 실행할 수 있는 코드가 아니에요. |
파서가 해석할 수 없는 구문 |
IndentIsNotMultipleOf4Error |
들여쓰기는 4의 배수여야 해요. |
들여쓰기가 4칸 단위가 아님 |
IndentLevelMismatchError |
들여쓰기가 잘못되었어요. |
예상과 다른 들여쓰기 깊이 |
UnexpectedCharError |
문자 ...는 ...에 사용할 수 없어요. |
허용되지 않는 문자 사용 |
UnexpectedNewlineError |
...엔 줄바꿈을 사용할 수 없어요. |
줄바꿈이 허용되지 않는 위치 |
UnexpectedEndOfCodeError |
"..."가 나와야 했지만 코드가 끝났어요. |
코드가 미완성 상태로 종료 |
UnexpectedTokenError |
...은 ...에 사용할 수 없어요. |
예상과 다른 토큰 등장 |
변수 이름이나 사용에 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
NotDefinedIdentifierError |
"이름"라는 변수나 약속을 찾을 수 없어요. |
정의되지 않은 변수나 약속 사용 |
NotProperIdentifierNameToDefineError |
"..."는 변수나 약속의 이름으로 사용할 수 없어요. |
예약어를 변수/약속 이름으로 사용 |
계산이나 비교 중 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
InvalidTypeForOperatorError |
...는 더하기할 수 없어요. |
해당 연산자가 지원하지 않는 타입 조합 |
InvalidTypeForCompareError |
...와 ...는 비교할 수 없어요. |
비교할 수 없는 타입 조합 |
UnknownOperatorError |
...는 알 수 없는 연산자에요. |
알 수 없는 연산자 |
NotBooleanTypeError |
참/거짓(Boolean) 타입이어야 해요. |
참/거짓이 필요한 곳에 다른 타입 사용 |
InvalidFormulaError |
계산식이 올바르지 않아요. |
수식 구조 오류 |
FormulaStackUnderflowError |
연산할 값이 부족해요. |
수식에서 피연산자 부족 |
인덱스 및 범위 에러
Section titled “인덱스 및 범위 에러”목록, 사전, 문자열 접근 중 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
IndexKeyNotFoundError |
...에는 ...라는 값이 없어요. |
존재하지 않는 키/인덱스 접근 |
StringIndexOutOfRangeError |
...에서 N번째 글자를 가져올 수 없어요. |
문자열 인덱스 초과 |
ListIndexMustBeGreaterOrEqualThan0Error |
목록의 인덱스는 0보다 크거나 같아야 해요. |
음수 인덱스 사용 |
ListIndexTypeError |
목록의 인덱스는 정수여야 해요. |
정수가 아닌 값으로 인덱스 접근 |
TargetIsNotIndexedValueError |
...는 인덱스로 값을 가져올 수 없어요. |
인덱싱을 지원하지 않는 값에 [] 사용 |
TupleNotMutableError |
튜플은 한 번 만들면 값을 바꿀 수 없어요. |
튜플 값 변경 시도 |
NotEnumerableValueForListLoopError |
...는 목록 반복문에서 사용할 수 없어요. |
목록이 아닌 값으로 목록 반복문 사용 |
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
RangeStartMustBeNumberError |
범위의 시작은 숫자여야 해요. |
범위 시작이 숫자가 아님 |
RangeEndMustBeNumberError |
범위의 끝은 숫자여야 해요. |
범위 끝이 숫자가 아님 |
RangeStartMustBeIntegerError |
범위의 시작은 정수여야 해요. |
범위 시작이 정수가 아님 |
RangeEndMustBeIntegerError |
범위의 끝은 정수여야 해요. |
범위 끝이 정수가 아님 |
RangeStartMustBeLessThanEndError |
범위의 시작은 끝보다 클 수 없어요. |
시작이 끝보다 큼 |
약속(함수) 에러
Section titled “약속(함수) 에러”약속 정의나 호출 중 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
AlreadyDefinedFunctionError |
이미 "..."라는 약속(번역)이 있어요 |
같은 이름의 약속 중복 정의 |
FunctionMustHaveOneOrMoreStringPartError |
약속(번역)을 선언할 때엔 적어도 하나의 고정되는 부분이 있어야 해요. |
약속 이름에 고정 문자열 부분이 없음 |
CannotReturnOutsideFunctionError |
"약속 그만"은 약속 안에서만 사용할 수 있어요. |
약속 바깥에서 약속 그만 사용 |
CallStackDepthExceededError |
약속을 너무 깊이 호출했어요. |
재귀 호출이 너무 깊어짐 (스택 오버플로우) |
반복문 에러
Section titled “반복문 에러”반복문 사용 중 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
BreakNotInLoopError |
"반복 그만"은 반복문 안에서만 사용할 수 있어요. |
반복문 바깥에서 반복 그만 사용 |
NoBreakOrReturnError |
반복문 안에 "반복 그만"이나 "반환"이 없어요. |
무한 반복 가능성 (탈출 조건 없음) |
LoopCountIsNotNumberError |
반복 횟수는 숫자여야 해요. |
N번 반복에서 N이 숫자가 아님 |
LoopWithoutBodyError |
반복문에 실행할 내용이 없어요. |
빈 반복문 |
번역(FFI) 에러
Section titled “번역(FFI) 에러”외부 번역 실행 중 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
FFIRuntimeNotFound |
번역(...)을 처리할 수 있는 실행 환경이 없어요. |
해당 런타임 이름의 확장 패키지가 등록되지 않음 |
MultipleFFIRuntimeError |
번역(...)을 처리할 수 있는 실행 환경이 여러 개 있어요. |
같은 런타임 이름의 확장이 여러 개 |
FFIResultTypeIsNotForYaksokError |
번역 "..."의 결과값 ...는 약속에서 사용할 수 있는 값이 아니에요. |
FFI가 약속 호환 타입이 아닌 값을 반환 |
ErrorInFFIExecution |
(내부 에러 메시지) | 번역 실행 중 에러 발생 |
ErrorOccurredWhileRunningFFIExecution |
번역 ("...")을 실행 중에 문제가 발생했어요. |
번역 실행 중 래핑된 에러 |
모듈 관리 중 문제가 있을 때 발생합니다.
| 에러 | 메시지 (예시) | 원인 |
|---|---|---|
FileForRunNotExistError |
실행하려는 파일 "main"을(를) 찾을 수 없어요. |
runModule()에 존재하지 않는 모듈 이름 전달 |
AlreadyRegisteredModuleError |
모듈 "..."은(는) 이미 등록되어 있어요. |
같은 이름으로 addModule() 중복 호출 |
ErrorInModuleError |
다른 약속 파일 ...에서 오류가 발생했어요. |
불러온 모듈에서 에러 발생 (래핑) |
호스트 환경에서 에러 처리하기
Section titled “호스트 환경에서 에러 처리하기”runModule()의 반환값을 통해 에러를 확인할 수 있습니다.
const results = await session.runModule('main')const result = results.get('main')!
switch (result.reason) { case 'finish': // 성공 break case 'error': console.error(result.error) // YaksokError break case 'validation': console.error(result.errors) // Map<string, YaksokError[]> break case 'aborted': // AbortSignal에 의해 중단됨 break}instanceof를 사용해 특정 에러 타입을 구분할 수도 있습니다.
import { NotDefinedIdentifierError } from '@dalbit-yaksok/core'
if (result.reason === 'error') { if (result.error instanceof NotDefinedIdentifierError) { console.log('정의되지 않은 변수:', result.error.resource?.name) }}