반응형
목 차
1. 들어가며
2. 에러 발생 과정
3. 에러 해결 과정
4. 전체 코드 및 결과
5. 마치며
1. 들어가며
바이비트API를 통해 투자가능금액(available balance)와 시간(time_now)를
데이터를 수신/출력하는 과정에서 아래와 같은 오류가 발생하였다.
오류내용은 "int함수는 10진법으로 해석할 수 없다"는 내용이다.
- 오류 내용 : ValueError: invalid literal for int() with base 10 : '1667643174.736790'
그런데, 오류 내용이 너무 어렵다. @.@
그냥 마이크로 초가 있는 문자형의 유닉스(Unix)시간은 int형이 아닌,
float형으로 먼저 변환해야 한다고 설명하면 될 거 같다.
구체적으로 아래에서 확인해 보자
2. 에러 발생 과정
여기서는 투자가능금액이 아닌, 시간 관련 데이터에 대해 알아보자.
에러는 20줄에서 발생한다.
(소수점을 가진 문자형을 int형으로 바로 받을 수 없다)
3. 에러 해결 과정
위의 에러는 <그림1>의 20줄에서 오류가 발생한다.
유닉스 시간의 마이크로 초(소수)가 있는 문자형은 int형으로 바꿀 수 없다는 것이다.
에러를 해결하는 방법은 문자형에 float형을 먼저 붙여주고, int를 붙여준다.
(마이크로 초를 제거하기 위해서이다)
(당초) time_now = int ( resp [ "time_now" ] )
(변경) time_now = int ( float ( resp [ "time_now" ]))
4. 전체 코드 및 결과
from pybit.inverse_perpetual import HTTP
import datetime as dt
with open(r'C:\Users\... api 경로 ') as f:
lines = f.readlines()
api_key = lines[0].strip()
api_secret = lines[1].strip()
def avail_balance(coin_name):
session = HTTP(
endpoint="https://api.bybit.com",
api_key=api_key,
api_secret=api_secret
)
resp = session.get_wallet_balance(coin = coin_name)
available_balance = resp["result"]["BTC"]["available_balance"] # str형으로 출력됨
time_now = int(float(resp["time_now"]))
time_now = dt.datetime.fromtimestamp(time_now)
print(available_balance)
print(time_now)
avail_balance("BTC")
# (expected result)
# 4.399e-05
# 2022-11-05 19:39:41
5. 마치며
바이비트API, 키움증권OpenAPI 등 API에서 수신받은 데이터는
문자형으로 사용자에게 제공된다.
수신받은 데이터가 소수점을 가진 데이터라면,
우선은 float형(실수)으로 바꾸어주고 나서,
int형(정수)형으로 바꾸어주면,
시간을 출력할 때, 마이크로 초가 삭제되고 출력된다.
반응형