остановка выполнения кода в чистом виде python

У меня есть графический интерфейс, созданный с использованием PyQt. В графическом интерфейсе это кнопка, которая при нажатии отправляет некоторые данные клиенту. Ниже приведен мой код

class Main(QtGui.QTabWidget, Ui_TabWidget):
    def __init__(self):
        QtGui.QTabWidget.__init__(self)
        self.setupUi(self)
        self.pushButton_8.clicked.connect(self.updateActual)

    def updateActual():
        self.label_34.setText(self.comboBox_4.currentText())        
        HOST = '127.0.0.1'    # The remote host
        PORT = 8000              # The same port as used by the server
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((displayBoard[str(self.comboBox_4.currentText())], PORT))
        except socket.error as e:
            err1 = str(self.comboBox_4.currentText()) + " is OFF-LINE"
            reply2 = QtGui.QMessageBox.critical(self, 'Error', err1, QtGui.QMessageBox.Ok)
            if reply2 == QtGui.QMessageBox.Ok:
                pass   #stop execution at this point
        fileName = str(self.comboBox_4.currentText()) + '.txt'
        f = open(fileName)
        readLines = f.readlines()
        line1 = int(readLines[0])
        f.close()

В настоящее время, если пользователь нажимает «ОК» в QMessageBox, программа продолжит выполнение кода, если это исключение сокета. Таким образом, мой вопрос заключается в том, как я могу остановить выполнение кода после «кроме» чистым способом, чтобы мой пользовательский интерфейс не зависал, и пользователь мог продолжать его использовать?


person prattom    schedule 09.01.2014    source источник
comment
Могу ли я написать просто пустой return 'return' вместо 'pass'   -  person prattom    schedule 09.01.2014


Ответы (1)


Да, можно просто return из блока if:

if reply2 == QtGui.QMessageBox.Ok:
    return

В качестве альтернативы переместите свой код, когда он не raise socket.error, в блок else:

try: # this might fail
    s.connect(...)
except socket.error as e: # what to do if it fails
    err1 = ...
    reply2 = QtGui.QMessageBox.critical(...)
else: # what to do if it doesn't
    with open(fileName) as f:
        line1 = int(f.readline().strip())

Обратите внимание, что:

  1. На самом деле вам не нужно иметь дело с возвратом из окна сообщения, так как это может быть только нормально, и у вас нет опции else;
  2. обычно вы должны использовать with для обработки файлов, он автоматически будет close в конце блока; а также
  3. вы можете упростить код обработки файлов, прочитав только первую строку.
person jonrsharpe    schedule 09.01.2014
comment
Спасибо, что рассказали мне о «с». - person prattom; 09.01.2014