Soju06 / python-kis

📈 파이썬 한국투자증권 REST 기반 Trading API 라이브러리
https://github.com/Soju06/python-kis/wiki
MIT License
135 stars 46 forks source link

[버그]: krx 주식 002170 정보를 quote 로 가져올 때 발생하는 버그 #48

Closed nohvenell2 closed 1 week ago

nohvenell2 commented 2 weeks ago

빠른 문제 해결을 위해 다음을 확인했나요?

버그 설명

에러가 발생하는 코드

from util._pykis.Load_Pykis import KIS
stock = KIS.stock('002170').quote()

에러 내용

Exception has occurred: KeyError
"KisDomesticQuote.sector_name 필드의 bstp_kor_isnm값이 존재하지 않습니다. (KisString(field='bstp_kor_isnm', scope=None, absolute=False))"
  File "C:\Git\Pykis_Data\app\temp.py", line 3, in <module>
    stock = KIS.stock('002170').quote()
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: "KisDomesticQuote.sector_name 필드의 bstp_kor_isnm값이 존재하지 않습니다. (KisString(field='bstp_kor_isnm', scope=None, absolute=False))"

에러 원인 추측

python-kis 라이브러리 app/stock/quote.py 의 domestic_quote 함수에서 한국투자 open api 의 국내주식시세 -> 주식현재가 시세[v1_국내주식-008] API 를 사용하고 있습니다. API doc 에서는 업종 한글명인 bstp_kor_isnm 값을 제공한다고 하지만, 직접 002170 주식 코드로 fetch 해본 결과 bstp_kor_isnm 키 자체가 존재하지 않습니다. kospi 주식 815 개로 테스트 해본 결과 다음 코드의 주식들이 같은 현상이 나타나고, quote 실행시 같은 오류가 발생합니다.

ErrorStock = [ '002170', '002450', '004700', '004970', '007160', '011090', '011330', '013890', '016800', '030720', '033780', '071950', '079430', '084680', '111380', '134790', '194370', '241590']

종속성 버전 문제 진단

Version: PyKis/2.0.3 Python: CPython 3.12.5 System: Windows 10.0.19045 [AMD64]

Installed Packages: ========== requests =========== Required: 2.32.3>= Installed: Not Found ====== websocket-client ======= Required: 1.8.0>= Installed: Not Found ======== cryptography ========= Required: 43.0.0>= Installed: Not Found ========== colorlog =========== Required: 6.8.2>= Installed: Not Found

재현 방법

from pykis import PyKis
#pykis 객체
KIS = PyKis(
    id=SITE_ID,
    account=ACC_NO_REAL,
    appkey=APP_KEY_REAL,
    secretkey=APP_SEC_REAL,
    keep_token=True
)
stock = KIS.stock('002170').quote()

추가 정보

에러가 발생하는 종목들은 공통점이 있습니다. 코스피 주식 종목 엑셀 파일로 만들기를 이용해 엑셀 파일에서 확인해 본 결과 에러가 발생하는 18개의 종목들은 지수업종대분류, 지수업종중분류, 지수업종소분류 값이 0으로 업종 한글명을 알아낼수 없고, api 에서는 bstp_kor_isnm 값을 none 으로라도 제공해야하지만, 아예 key 자체를 제공하지 않는 것으로 보입니다

/pykis/api/stock/quote.py 404 줄을 bstp_kor_isnm 키가 없으면 상품유형타입을 빈문자열로 반환하도록 임시로 변경하니 에러는 발생하지 않았습니다.

 #sector_name: str = KisString["bstp_kor_isnm"] # 이전 코드
 sector_name: str = KisString["bstp_kor_isnm",""] # 변경된 코드

PR를 통해 라이브러리에 기여하고 싶으신가요?