3. 비트코인 선물/3-4. 오류 해결

(파이썬) TypeError: 'float' object cannot be interpreted as an integer 오류 해결

봄이오네 2022. 10. 19. 08:14
반응형

1. 들어가며

바이비트 API를 통해 1분봉을 받으려고 for문을 돌리는 과정에서
float 관련 에러가 났다.
float형(실수)은 integer형(정수)으로 해석될 수 없다???


2. 오류가 발생한 과정

1) 바이비트의 시간 제공

바이비트는 UNIX 시간을 활용한다.
2022년 10월 12일 01시 41분 50초를 1665506510로 제공한다.
* UNIX 시간이란? 1970년 1월1일을 기준으로 경과한 시간을 말함

2) time 모듈 사용

time()은 현재시간을 말하며, time()-60은 1분전을 나타내고, time()-120은 2분전을 말한다.

from pybit.inverse_perpetual import HTTP
from time import time   # 현재시간 : time() / unix 스탬프(timestamp)

    for i in range(time()-120, time(), 60):    # 2022-01-30 09:00:00 → 1643500800
        resp = session.query_kline(
            symbol="BTCUSD",
            interval=1,
            limit=3,
            from_time= i

3) for문의 range 설명

아래의 코드에서 range 안쪽을 보면
시작은 time()-120(초)이며 끝은 time()이다. 60초 간격을 돌려라.
즉 현재 01:40분이라면, 01:38분, 01:39분 등 이렇게 2개를 나타내라는 것이다.

4) 오류는 for문을 돌리는 과정에서 나타났다.

for문은 range의 시작 숫자를 불러오는데, time()-120의 태형은 정수가 아닌 실수형(float)이라는 사실이다.
UNIX시간은 밀리세컨드를 가진 float형이다.

그림1. 현재시간을 UNIX로 출력하였고, 실수형(float)임을 확인할 수 있다

3. 해결 방법

for문과 함께 쓰이는 range는 정수만 다룬다는 내용을 기억하자.
이에 대한 해결은, time() 앞에 int를 붙여서, 정수형으로 바꾸어준다.
(밀리 세컨드가 현재 시간에 영향을 주는 경우는 극히 드물다)

그림2. range 안의 time() 앞에 int를 붙였다

4. 마치며

for문과 함께 쓰이는 range가 정수만 다룰 수 있다는 내용은 이번에 처음알았다.
알면 알수록 신기한게 for문은 정말 배울게 많다 싶다.

그나저나, 당초 생각한대로 "1분 전" 데이터를 받을 수 있는지
계속 연습 중인데, 필자 스스로가 생각하는 방법/시간으로
데이터를 받을 수 있으려면, 상당한 시간이 필요할 거 같다.

반응형