본문 바로가기
무모한 도전-주식 인공지능 만들기

RLTrader의 유저 인터페이스를 만드는 작업-4-

by 인터넷떠돌이 2018. 12. 13.
반응형

안녕하세요?


지난번 포스팅에서 한번 데이터 베이스에서 원하는 테이블이 있는지 없는지 여부를 알아보고서 해당하는 메세지 박스를 띄우는 것이 정말로 힘든 일이기는 힘든 일이라는 것을 알 수 있었습니다. 아무튼 간에 이렇게 힘들긴 해도 한번 결정을 한 이상 어떻게 구현을 해보고자 하는 습관을 들이기 위해서라도 이를 해결하고자 합니다. 그리고 이번 포스팅에서 올리는 내용도 관련되 내용입니다.



일단 어디가 문제인가 했더니, 제가 종목코드 = 테이블 이름을 입력받는 곳은 lineEdit_2입니다. 그걸 먼저 생각하지 않은 것이 실책은 실책이었습니다.



다음으로는 이 lineEdit_2의 텍스트를 가지고 와서 비교를 해야 작업이 잘 넘어갈 수 있었습니다. 그러나 그래도 여전히 에러는 해결이 되지 않았습니다.



일단 sqlite3의 함수인 execute()를 통해서 나오는 값이 전혀 문자열이 아니라는 데 문제점이 있습니다. 한마디로 이 대로는 안되고 어떻게 해서 이를 변형해야 할 필요가 있습니다.



그래서 방법을 바꾸어서, fetchone()이라는 함수를 통해서, 저 많은 데이터-테이블의 이름중에서 하나를 선택하는 것으로 바꾸었습니다.




다만 문제가 fetchone()으로 나오는 값이 일종의 튜플의 형식이라서, [0]과 같은 값을 붙여서 인덱스를 지정해야 겠다는 생각이 들었습니다.



일단 먼저 str()함수를 이용해서 문자열로 바꾸어 주도록 합니다.



그리고 나서 뒤에 [0]을 붙여서, fetchone()으로 나왔는 튜플에서 인덱스가 0인 값을 선택하라는 식으로 만들어 주도록 합니다. 이제는 작동이 제대로 되리라 기대를 하면서 프로그램을 작동 시켜 보았습니다.



그래서 제대로 된 테이블의 이름이 있을 경우에는 위 스크린샷과 같은 메세지 박스가 나오는 것을 확인할 수 있었습니다. 이것으로 모든게 제대로 작동이 되는가 싶은데....




이렇게 제대로 된 테이블의 이름인 종목코드가 제대로 입력이 된 경우는 제대로 된 값이 나오는 것을 확인할 수는 있는데.......



문제는 위 스크린샷에 나와 있는 것처럼, 오타라고 해야 할까요? 한마디로 제대로 된 종목코드가 아닌 값이 들어오게 되면, 어떤 문제가 생기냐 하면....



오류가 생기면서 프로그램이 강제종료가 되어 버리는 문제점이 벌어지게 됩니다. 그래서 이게 도데체 어떻게 된 일인지 알아 보아야 할 필요성은 있어 보여서 한번 print()함수를 사용해서 일단 표식을 찍어보고 조사를 해 보았습니다.



결국 어디가 문제였냐 하면, 저렇게 위에서 나와 있는 execute('select name from sqlite_master where type="table" and name "테이블의 이름")에서 찾던 테이블의 이름이 있으면 튜플의 형식으로 나오기는 하지만, 문제는 찾고자 하는 테이블이 없으면 아무런 값도 나오지 않는 None이 나오게 됩니다. 여기다가 fetchone()으로 [0]까지 붙이니, 인덱스가 아예 없기 때문에 이런 에러가 벌어진 것 입니다. 


그래서 해결책은 이렇게 fetchone()으로 나오는 값이 있다 = 일치하는 테이블이 있다 = true의 값이다 라는 식으로 해서, None이 아닐 경우에는 일치하는 테이블이 있는 것으로 간주하고, None이 되는 경우에는 테이블이 존재하지 않는 것으로 간주를 하는 것 입니다.



이렇게 하는 것으로 어떻게 제가 작성한 프로그램-정확히는 유저 인터페이스가 유저와 상호작용을 하는지를 보여주고 있습니다. 물론 제 혼자만 쓰려고 하면 이렇게 까지 필요하지 않을 수는 있겠지만, 그래도 공부를 시작하기는 시작한 것이고, 처음부터 파이썬을 배우고자 이러는게 아니라, 주식 인공지능 프로그램을 만든다고 배우기 시작했지만, 어쨎든 이것도 배움의 과정이니까, 이렇게 유저 인터페이스를 만드는 것으로 당분간의 포스팅을 이어나가겠습니다.

반응형