안녕하세요?


지난번 포스팅에서 어떻게 데이터 베이스 파일이 저장이 될 경로를 지정하는 것 까지는 해 보았습니다만, 문제는 경로나 종목코드가 빈 상태로 입력을 하면 그냥 오류가 나서 프로그램이 종료되어 버리는 문제가 항상 발생하였습니다. 그래서 이런 문제를 방지하기 위해서 경고 메세지 박스를 띄우면 되는데, 이 경고 메세지 박스를 띄우는 것에도 상당한 일이 걸렸습니다. 아무튼 이번 포스팅에서는 어떻게 경고 메세지 박스(warning box)를 띄웠는지에 대해서 한번 포스팅을 해 보고자 합니다.



먼저 일봉차트 데이터를 가지고 오기 위한 메소드에 위 스크린샷과 같이 folderPath2가 비어있지 않다면, ( != '' ) 이라는 조건에서는 text()라는 함수를 이용해서 텍스트화 시킨 변수의 값을 folderPath3에 집어 넣도록 하고, 다음에는 QMessageBox.about(self, "타이틀 이름", "메세지내용") 이라는 형식으로 한번 메세지 박스를 띄우도록 하면, 마지막에 return을 넣어서 한번 강제로 오류로 인한 종료를 막아 보도록 합니다.



다음으로는 기존의 con항목에 일일히 경로를 입력한 다음에, 여기서 파일의 이름까지 지정을 해야 했는데, folderPath3라는 변수를 넣어서, 버튼하나로 지정된 경로를 만들어 보도록 했으며, 다음으로는 데이터베이스 파일의 명은 daynow4라는 변수를 사용해서, 자동으로 현재 날짜가 되도록 입력을 하였습니다.



그런데 어디가 오류가 났는지 제대로 실행이 되지 못하고 어디선가 오류가 나오는 것을 확인할 수 있엇습니다. 아무튼 간에 이건 이것이고, 이 오류를 해결하러 가봐야 합니다.



알고보니 folderPath2라는 변수가 공백이라는 것도 선언을 하지 않아서 벌어진 일 입니다. 그래서 일단은 클래스 변수로 선언을 해 주도록 합니다.



다음으로는 어디서 에러가 나왔는지 감지 하기 위해서 일일히 print()함수를 써서 하나하나 표식을 남겨 주도록 합니다. 이렇게 하는 것으로 계속해서 작업을 이어 가도록 합니다. 그리고 여기서 특이한 것으로 하나 알려드릴 것이 있는데, if문에서 문자열이든 숫자이든 변수가 공백의 값을 가지면, False라는 값을 나타내기 때문에, 그냥 if 변수: 라는 식으로 if문을 만들어도 됩니다.



그래서 종목코드만 입력하고, 데이터베이스의 경로를 입력하지 않았다면, 위 스크린샷처럼 폴더 경로를 지정하라는 경고박스가 나오고, 프로그램이 강제종료되지 않고, 계속 유지가 되는 것을 확인할 수 있었습니다.




이제 데이터 베이스 파일이 저장이 되기 위한 폴더 경로를 지정해 주도록 합니다.



그런데 계속해서 이런 위와 같은 경고 메세지가 폴더 경로를 지정했음에도 뜨는 것을 확인할 수 있었습니다.



그래서 기존에 있던 폴더 경로가 지정되면 호출이 되는 메소드에서 return등에 전에는 없던 self를 붙여 주도록 했습니다.



그러자 이번에는 경로를 지정하고 나서 프로그램을 실행시키자, 위 스크린샷처럼 강제종료가 벌어지는 것을 확인할 수 있었습니다.



일단 이전에 print()함수를 사용해서 마킹한 곳에서 어디서 에러가 벌어진 것인지를 한번 알아 보고자 합니다.



알고 봤더니 self가 붙은 변수는 이 함수에서 저 함수로 건너가서 사용이 가능한데, 대신에 문자열로 변형시키기 위해서는 위 스크린샷처럼 기존의 text()함수 대신에 str()함수를 사용해야 했습니다.




이제서야 제대로 프로그램이 실행이 되는 것을 확인할 수 있었습니다. 일단 위 스크린샷에서 보이는 것철머 code 0라고 하는 식으로 정상적인 종료가 일어났습니다.



실제로 데이터 베이스의 파일이 생성이 되었는지에 대해서 위 스크린샷처럼 한번 확인을 해 보도록 했으며, 이 작업을 했는 날짜에 맞춰서 제대로 나왔는 것을 볼 수 있었습니다.



그리고 나서 위 스크린샷처럼 제대로 원하는 대로 주식의 일봉차트 데이터가 들어온 것을 확인할 수 있었습니다. 이렇게 하는 것으로 일단 작업이 되기는 된 듯 합니다.



다음으로는 위 스크린샷처럼 종목코드가 비었을 때, 즉 종목코드가 입력되지 않고 일봉차트를 가져오라고 명령을 내리면 그대로 에러가 뜨면서 프로그램이 종료되었는데, 이를 해결하기 위해서 위 스크린샷처럼 경고 박스를 만들어 주도록 합니다.



그런데 lineEdit으로 하면 제대로 효과가 나오지 않았으므로, 이번에는 위 스크린샷처럼 lineEdit_2를 지정했습니다. 여기서는 제대로 된 코드를 입력해야만 종목명이 나오기 때문에, 이에 착안해서 여기가 비어 있으면 경고박스가 뜨고, 아니면 다음 작업이 일어 나도록 만들었습니다.



마지막으로 위 스크린샷처럼 에러 메세지 박스가 뜨는 것을 확인할 수 있었습니다. 이렇게 하는 것으로 어떻게 작업이 성공적으로 끝나기는 했는데, 문제는 여전히 기계학습과 연동이 아직은 되지 않았고, 아직 제대로 된 수익모델을........ 이전에 작업한 것을 사용할까 하는 생각도 들지만, 일단은 기계학습도 중요하기 때문에, 이에 대해서 한번 RLTrader를 손봐야 할 때가 온듯 합니다.

  1. 모르 2020.09.07 22:10

    저는 버튼 안만들고 바로 적용되게 했습니다.
    def day_candle_data(self):
    # 폴더 지정
    if self.lineEdit_2.text() != '':
    folderPath = QFileDialog.getExistingDirectory(self, self.tr("저장 경로를 선택하세요"), "./", QFileDialog.ShowDirsOnly)
    else:
    QMessageBox.about(self, "Error", "종목 코드를 입력하세요!")
    return
    어렵네요 ㅠㅠ

    • 안녕하세요?

      개인적인 일이 있어서 댓글이 늦어졌는데, 도저히 안되겠다는 생각이 드시면, 버튼은 생략하시고, 경로를 일일히 입력해도 됩니다.

+ Recent posts