Skip to content

에러 레퍼런스

달빛약속 코드를 실행할 때 발생할 수 있는 에러 목록입니다. 모든 에러는 YaksokError를 상속하며, @dalbit-yaksok/core에서 가져올 수 있습니다.

ts
import { NotDefinedIdentifierError } from '@dalbit-yaksok/core'

에러를 기계가 읽을 수 있는 형태로 변환하려면 3.1. 기계가 읽을 수 있는 에러 문서를 참고하세요.

문법 및 파싱 에러

코드 구조에 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
CannotParseError"..."는 실행할 수 있는 코드가 아니에요.파서가 해석할 수 없는 구문
IndentIsNotMultipleOf4Error들여쓰기는 4의 배수여야 해요.들여쓰기가 4칸 단위가 아님
IndentLevelMismatchError들여쓰기가 잘못되었어요.예상과 다른 들여쓰기 깊이
UnexpectedCharError문자 ...는 ...에 사용할 수 없어요.허용되지 않는 문자 사용
UnexpectedNewlineError...엔 줄바꿈을 사용할 수 없어요.줄바꿈이 허용되지 않는 위치
UnexpectedEndOfCodeError"..."가 나와야 했지만 코드가 끝났어요.코드가 미완성 상태로 종료
UnexpectedTokenError...은 ...에 사용할 수 없어요.예상과 다른 토큰 등장

변수 에러

변수 이름이나 사용에 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
NotDefinedIdentifierError"이름"라는 변수나 약속을 찾을 수 없어요.정의되지 않은 변수나 약속 사용
NotProperIdentifierNameToDefineError"..."는 변수나 약속의 이름으로 사용할 수 없어요.예약어를 변수/약속 이름으로 사용

연산 에러

계산이나 비교 중 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
InvalidTypeForOperatorError...는 더하기할 수 없어요.해당 연산자가 지원하지 않는 타입 조합
InvalidTypeForCompareError...와 ...는 비교할 수 없어요.비교할 수 없는 타입 조합
UnknownOperatorError...는 알 수 없는 연산자에요.알 수 없는 연산자
NotBooleanTypeError참/거짓(Boolean) 타입이어야 해요.참/거짓이 필요한 곳에 다른 타입 사용
InvalidFormulaError계산식이 올바르지 않아요.수식 구조 오류
FormulaStackUnderflowError연산할 값이 부족해요.수식에서 피연산자 부족

인덱스 및 범위 에러

목록, 사전, 문자열 접근 중 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
IndexKeyNotFoundError...에는 ...라는 값이 없어요.존재하지 않는 키/인덱스 접근
StringIndexOutOfRangeError...에서 N번째 글자를 가져올 수 없어요.문자열 인덱스 초과
ListIndexMustBeGreaterOrEqualThan0Error목록의 인덱스는 0보다 크거나 같아야 해요.음수 인덱스 사용
ListIndexTypeError목록의 인덱스는 정수여야 해요.정수가 아닌 값으로 인덱스 접근
TargetIsNotIndexedValueError...는 인덱스로 값을 가져올 수 없어요.인덱싱을 지원하지 않는 값에 [] 사용
TupleNotMutableError튜플은 한 번 만들면 값을 바꿀 수 없어요.튜플 값 변경 시도
NotEnumerableValueForListLoopError...는 목록 반복문에서 사용할 수 없어요.목록이 아닌 값으로 목록 반복문 사용

범위 관련

에러메시지 (예시)원인
RangeStartMustBeNumberError범위의 시작은 숫자여야 해요.범위 시작이 숫자가 아님
RangeEndMustBeNumberError범위의 끝은 숫자여야 해요.범위 끝이 숫자가 아님
RangeStartMustBeIntegerError범위의 시작은 정수여야 해요.범위 시작이 정수가 아님
RangeEndMustBeIntegerError범위의 끝은 정수여야 해요.범위 끝이 정수가 아님
RangeStartMustNotBeGreaterThanEndError범위의 시작은 끝보다 클 수 없어요.시작이 끝보다 큼

약속(함수) 에러

약속 정의나 호출 중 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
AlreadyDefinedFunctionError이미 "..."라는 약속(번역)이 있어요같은 이름의 약속 중복 정의
FunctionMustHaveOneOrMoreStringPartError약속(번역)을 선언할 때엔 적어도 하나의 고정되는 부분이 있어야 해요.약속 이름에 고정 문자열 부분이 없음
CannotReturnOutsideFunctionError"약속 그만"은 약속 안에서만 사용할 수 있어요.약속 바깥에서 약속 그만 사용
CallStackDepthExceededError약속을 너무 깊이 호출했어요.재귀 호출이 너무 깊어짐 (스택 오버플로우)

반복문 에러

반복문 사용 중 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
BreakNotInLoopError"반복 그만"은 반복문 안에서만 사용할 수 있어요.반복문 바깥에서 반복 그만 사용
NoBreakOrReturnError반복문 안에 "반복 그만"이나 "반환"이 없어요.무한 반복 가능성 (탈출 조건 없음)
LoopCountIsNotNumberError반복 횟수는 숫자여야 해요.N번 반복에서 N이 숫자가 아님
LoopWithoutBodyError반복문에 실행할 내용이 없어요.빈 반복문

클래스 에러

클래스 정의나 인스턴스 사용 중 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
AlreadyDefinedClassError... 클래스는 이미 정의되어 있습니다.같은 이름의 클래스 중복 정의
InvalidParentClassError...은(는) 부모 클래스로 쓸 수 없습니다.존재하지 않거나 클래스가 아닌 값을 상속
NotAClassError...은(는) 클래스가 아닙니다. 키워드에 클래스가 아닌 값 사용
DotAccessOnlyOnInstanceError온점(.)은 인스턴스에만 사용할 수 있습니다.인스턴스가 아닌 값에 . 사용
ConstructorArityMismatchError...의 __준비__에 인자 N개를 넘겼지만...생성자에 잘못된 수의 인자 전달
ConstructorArityAmbiguousError...의 __준비__에 인자 N개 생성자가 여러 개 있어 모호합니다.같은 인자 수의 생성자가 여러 개
MemberNotFoundError... 인스턴스에서 ... 멤버를 찾을 수 없습니다.존재하지 않는 멤버 접근
MemberFunctionNotFoundError... 인스턴스에서 ... 멤버 메서드를 찾을 수 없습니다.존재하지 않는 메서드 호출
AlreadyDefinedMemberFunctionError... 클래스의 ... 메서드는 이미 정의되어 있습니다.같은 이름의 메서드 중복 정의

번역(FFI) 에러

외부 번역 실행 중 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
FFIRuntimeNotFound번역(...)을 처리할 수 있는 실행 환경이 없어요.해당 런타임 이름의 확장 패키지가 등록되지 않음
MultipleFFIRuntimeError번역(...)을 처리할 수 있는 실행 환경이 여러 개 있어요.같은 런타임 이름의 확장이 여러 개
FFIResultTypeIsNotForYaksokError번역 "..."의 결과값 ...는 약속에서 사용할 수 있는 값이 아니에요.FFI가 약속 호환 타입이 아닌 값을 반환
ErrorInFFIExecution(내부 에러 메시지)번역 실행 중 에러 발생
ErrorOccurredWhileRunningFFIExecution번역 ("...")을 실행 중에 문제가 발생했어요.번역 실행 중 래핑된 에러

모듈 에러

모듈 관리 중 문제가 있을 때 발생합니다.

에러메시지 (예시)원인
FileForRunNotExistError실행하려는 파일 "main"을(를) 찾을 수 없어요.runModule()에 존재하지 않는 모듈 이름 전달
AlreadyRegisteredModuleError모듈 "..."은(는) 이미 등록되어 있어요.같은 이름으로 addModule() 중복 호출
ErrorInModuleError다른 약속 파일 ...에서 오류가 발생했어요.불러온 모듈에서 에러 발생 (래핑)

호스트 환경에서 에러 처리하기

runModule()의 반환값을 통해 에러를 확인할 수 있습니다.

ts
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를 사용해 특정 에러 타입을 구분할 수도 있습니다.

ts
import { NotDefinedIdentifierError } from '@dalbit-yaksok/core'

if (result.reason === 'error') {
    if (result.error instanceof NotDefinedIdentifierError) {
        console.log('정의되지 않은 변수:', result.error.resource?.name)
    }
}