라즈베리파이 gui 알람시계 코드 에러 ValueError: invalid literal for int() with base 10: '2,'

조회수 837회

안녕하세요 저는 현재 라즈베리파이를 이용하여 졸업작품을 진행중입니다. 지금 qt creator gui를 이용하여 알람시계 코드를 만들었는데 알람을 설정했을 때 이러한 에러가 발생합니다. 예를 들어 01분, 05분과 같은 시간에 알람을 설정하면 아래와 같은 오류가 발생합니다.

self.alarm_h = int(alarm_time[19:21]) #value of hour is sorted in index value of 19 and 20
ValueError: invalid literal for int() with base 10: '2,' 

아무리 함수를 고쳐봐도 해결이 안되네요 어떻게 해야 할까요?

import sys

import time

from PyQt4 import QtCore, QtGui #PyQt4 is used for designing the GUI

from time import strftime # To get time from Raspberry pi

try:

    _fromUtf8 = QtCore.QString.fromUtf8

except AttributeError:
    def _fromUtf8(s):

       return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8

    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)

except AttributeError:

    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):

    def setupUi(self, MainWindow):

        self.alarm_h = 0
        self.alarm_m = 0

        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(676, 439)

        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.label = QtGui.QLabel(self.centralwidget)

        font = QtGui.QFont()
        font.setPointSize(14)
        self.label.setFont(font)
        self.label.setObjectName(_fromUtf8("label"))
        self.gridLayout.addWidget(self.label, 3, 0, 1, 1)

        self.Time_LCD = QtGui.QLCDNumber(self.centralwidget)
        self.Time_LCD.setObjectName(_fromUtf8("Time_LCD"))
        self.Time_LCD.setDigitCount(8)
        self.Time_LCD.display(strftime("%H"+":"+"%M"+":"+"%S")) #get time from Pi and display it 
        self.gridLayout.addWidget(self.Time_LCD, 1, 0, 1, 3)

        self.timer = QtCore.QTimer(MainWindow)
        self.timer.timeout.connect(self.Time)
        self.timer.start(1000)

        current_time = QtCore.QTime()
        self.Set_Time = QtGui.QTimeEdit(self.centralwidget)
        self.Set_Time.setObjectName(_fromUtf8("Set_Time"))
        self.Set_Time.setTime(current_time.currentTime())
        self.gridLayout.addWidget(self.Set_Time, 2, 0, 1, 1)


        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.pushButton.clicked.connect(self.button_pressed)
        self.gridLayout.addWidget(self.pushButton, 2, 1, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 676, 21))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

#End of code from Qt Designer

    def retranslateUi(self, MainWindow): #update the GUI window 
        print("Dispay Re-translated")
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.label.setText(_translate("MainWindow", "Alarm curretly Turned off", None))
        self.pushButton.setText(_translate("MainWindow", "Set Alarm", None))

    def Time(self): #Function to compare current time with set time 
        self.Time_LCD.display(strftime("%H"+":"+"%M"+":"+"%S"))
        self.current_h = int (strftime("%H"))
        self.current_m = int (strftime("%M"))

        if (self.current_h == self.alarm_h) and (self.current_m == self.alarm_m) and ((int(strftime("%S"))%15) == 0): #if the both time match 
            print("ALARM ON!!!!!")

            message1 = " The time is " + str(self.alarm_h) + " : " + str(self.alarm_m) + " on " + strftime("%A")
            message = "Sir, Good morning.. This is your wake up Alarm." + message1

            self.label.setText(_translate("MainWindow",message1, None)) #display the message on GUI screen            
            time.sleep(1)

    def button_pressed(self): #when set alarm button is pressed 
        print("Button Pressed")
        alarm_time = str(self.Set_Time.time())

        self.alarm_h = int(alarm_time[19:21]) #value of hour is sotred in index value 19 and 20
        self.alarm_m = int (alarm_time[23:25]) #value of minute is sotred in index value 23 and 24

        message = "Alarm is set at " + str(self.alarm_h) + " hours " + str(self.alarm_m) + " minutes"
        self.label.setText(_translate("MainWindow", message, None)) #display the message on GUI screen  

if __name__ == "__main__": #main function 

    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

1 답변

  • self.alarm_h = int(alarm_time[19:21]) #value of hour is sorted in index value of 19 and 20
    ValueError: invalid literal for int() with base 10: '2,' 
    

    에러메시지에 답은 나와 있어요.

    int 로 문자열을 정수로 바꾸려고 하는데, 주어진 문자열이 '2,' 입니다. 쉼표가 포함되어 있어서 에러가 발생했어요.

    이게 발생한 코드는 int(alarm_time[19:21]) 이부분이겠죠.

    이제 디버깅 하시면 됩니다.

    • 답변 감사합니다! 그 부분은 저도 알고있는 부분입니다. 근데 저 뒤에 컴마가 어디서 오는지 모르겠습니다. 위에 아무리 코드를 뒤져봐도 안보여서... 그러면 int((str(alarm_time[19:21])) 이런식으로 바꿔서 진행을 해야되나요?? 김주빈 2020.6.16 20:34
    • alarm_time 이 시간을 str 로 문자열로 만든 것이고, 이 문자열의 몇번째부터 몇번째가 시간을 나타내는 거라고 생각하는 것 같은데요... 12시도 있고 9시도 있고 그러니까 고정된 문자열 인덱스로 시간을 구하는 게 문제가 되는 것 같아요. 안그래요? nowp 2020.6.16 20:48
    • 네 맞습니다 그래서 계속해서 함수를 바꿔 보고 있는데 해결이 안되서 질문 드렸습니다... 김주빈 2020.6.16 21:11

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)