파이썬 디버깅 한줄씩 전부 실행시켜서 테스트하면
문제없이 돌아가는데 실행만 하면 왜 오류가 뜰까?
C:\test>"C:/Program Files/Python38/python.exe" c:/test/test.py
Traceback (most recent call last):
File "c:/test/test.py", line 417, in <module>
targets = inquiry_targets(portfolio)
File "c:/test/test.py", line 160, in inquiry_targets
for ticker in tickers:
TypeError: 'NoneType' object is not iterable
혹시 잘 아는 사람 있으면 좀 알려주라
님 코드가 없는데 어케알아요
리턴타입이 논타입이면 함수에서 리턴을 안할 확률이 높은데 로직상 리턴없이 종료되는 부분이 있을 수 있어여 예를 들면 if a == 1: return return []
자세한건 코드가 없어서 모르겠네여
now = datetime.datetime.now() sell_time1, sell_time2 = make_sell_times(now) setup_time1, setup_time2 = make_setup_times(now) tickers = pyupbit.get_tickers(fiat="KRW") portfolio = select_portfolio(tickers) targets = inquiry_targets(portfolio)
def inquiry_targets(tickers): targets = {} for ticker in tickers: targets[ticker] = cal_target(ticker) return targets
def select_portfolio(tickers, window=5): try: portfolio = [] noise_list = [] for ticker in tickers: df = pyupbit.get_ohlcv(ticker, i,pnterval="day", count=10) noise = 1 - abs(df['open'] - df['close']) / (df['high'] - df['low']) average_noise = noise.rolling(window=window).mean() noise_list.append((ticker,
select_portfolio 함수 본문은 저게 끝인가요
select_portfolio함수본문은저게끝인가요
def select_portfolio(tickers, window=5): try: portfolio = [] noise_list = [] for ticker in tickers: df = pyupbit.get_ohlcv(ticker, i,pnterval="day", count=10) noise = 1 - abs(df['open'] - df['close']) / (df['high'] - df['low']) average_noise = noise.rolling(window=window).mean()
noise_list.append((ticker, average_noise[-2])) sorted_noise_list = sorted(noise_list, key=lambda x:x[1]) for x in sorted_noise_list[:COIN_NUMS]: if x[1] < DUAL_NOISE_LIMIT: portfolio.append(x[0]) return portfolio except: return None
댓글로 올리니까 자꾸 짤리네요.. 글 하나 새로 써서 코드 쭉 올리는 게 낫겠죠?
select_portpolio에서 리턴한 값이 없어서 portpolio가 none type인거 같아여
그니까 예외가 터진거져 except에 print(11)를 찍어보면 11찍힐거 같아여
업비트 파싱하는 거 같은데 파싱때 전처리안해주면 가끔터지기도 해여 쓰레기값있는지 확인해보새여
한줄씩 디버깅 실행시켜서 보면 리턴되어서 portpolio에 값이 들어가는데 왜 이럴까요?
그런경우라면 네트워크문제일 가능성이 커여 퓨처를 사용하시던지 데이터 none이 아니기를 기다리는 콜백을 넣던지 아니면 간단하게슬립을 넣으셔도 되고
코드를 직접 짠 게 아니라 받아서 조건만 수정해서 쓰려고 했는데 배울게 많네요... 한번 검색해서 찾아보겠습니다.
넵 직접 하시면 배우는것도 많고 커스텀하기도 좋아요 화이팅입니다