콘텐츠로 이동

Errors

kxt는 명시적 예외 계층을 제공합니다. 모든 라이브러리 예외는 KXTError에서 파생되므로, 포괄적인 오류 경계는 KXTError 하나로 잡을 수 있고, 세부 처리가 필요할 때 하위 타입으로 분기합니다.

Exception hierarchy

KXTError
├── KXTValidationError          # 호출부가 잘못된 입력을 줬을 때
└── KXTClientError
    ├── KXTUnsupportedError     # 프로바이더가 지원하지 않는 기능
    ├── KXTAuthenticationError  # 인증 실패
    ├── KXTAPIError             # 프로바이더가 API 레벨 오류 응답
    └── KXTTransportError       # 응답 전 전송 계층 실패
        ├── KXTTimeoutError     # 타임아웃
        └── KXTConnectionError  # 연결 실패/끊김

모든 타입은 kxt 최상위에서 import할 수 있습니다.

from kxt import (
    KXTError,
    KXTValidationError,
    KXTUnsupportedError,
    KXTAuthenticationError,
    KXTAPIError,
    KXTTransportError,
    KXTTimeoutError,
    KXTConnectionError,
)

When each exception is raised

예외 원인 재시도 가능?
KXTValidationError 필수 파라미터 누락, 잘못된 timeframe 문자열 등 아니오 (코드를 고치세요)
KXTUnsupportedError 구현되지 않은 메서드/프로바이더 호출 아니오
KXTAuthenticationError 앱키·시크릿 불일치, 토큰 발급 실패 자격증명 수정 후 재시도
KXTAPIError KIS가 에러 코드를 담아 응답 (code 속성 참조) 코드에 따라 판단
KXTTimeoutError 네트워크 타임아웃 일반적으로 가능
KXTConnectionError 연결 실패·중단 일반적으로 가능
KXTTransportError 기타 전송 계층 오류 상황에 따라

try/except example

import asyncio

from kxt import (
    KISClient,
    KXTAPIError,
    KXTAuthenticationError,
    KXTTimeoutError,
)


async def safe_bars(client: KISClient, symbol: str):
    try:
        return await client.get_bars(symbol, timeframe="day")
    except KXTAuthenticationError:
        # 자격증명 문제: 상위로 올려 사용자 개입 유도
        raise
    except KXTTimeoutError:
        # 일시적 네트워크 지연: 짧게 대기 후 한 번 재시도
        await asyncio.sleep(1.0)
        return await client.get_bars(symbol, timeframe="day")
    except KXTAPIError as exc:
        # 프로바이더 에러 코드를 기록해 후속 조치
        print(f"KIS error: code={exc.code} message={exc}")
        raise

KXTAPIError vs KXTTransportError

  • KXTAPIError — HTTP 응답은 정상 수신했지만 프로바이더가 에러 페이로드를 반환했습니다. 재시도 가능 여부는 코드에 따라 다릅니다.
  • KXTTransportError응답 자체를 받지 못했습니다. 네트워크·타임아웃·연결 중단 같은 전송 계층 문제로, 보통 재시도 대상입니다.

이 구분은 ccxtExchangeError vs NetworkError 구분과 동일한 관점입니다.

KXTValidationError example

import asyncio

from kxt import KISClient, KXTValidationError


async def demo(client: KISClient) -> None:
    try:
        # timeframe 키워드 누락 — 필수 인자 검증에서 실패
        await client.get_bars("005930")
    except KXTValidationError as exc:
        print(f"validation failed: {exc}")

get_bars(...)timeframe 키워드 인자가 필수입니다. 누락하면 KXTValidationError가 발생합니다.

See also

  • Rate limits — 한도 초과 시 KXTAPIError로 관측.
  • KIS provider — 프로바이더별 에러 코드 매핑 참고.