PyQt应用程序中遇到异常时出现意外的SIGABRT和错误代码

时间:2019-01-11 15:21:49

标签: python pyqt5

在使用Python创建的Qt应用程序中,异常的处理方式很奇怪(此处使用PyQt5创建,但我注意到PySide和PyQt4的行为类似)。请考虑以下脚本。也许这有点太冗长,但是我想创建一个半现实的示例,其中应用程序,主窗口和中央小部件都是分别创建的(可能像现实应用程序中那样是由单独的Python模块创建的)。

from sys import argv, exit

from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLabel, QVBoxLayout, \
    QPushButton


def main():
    print("running the main Python function")
    run_app()


def run_app():
    print("intialising the app")
    app = QApplication(argv)
    ex = MainWindow()
    exit(app.exec_())


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        print("initialising the main window")
        gui = GUIWidget(self)
        self.setCentralWidget(gui)
        self.show()


class GUIWidget(QWidget):
    def __init__(self, parent=None):
        super(GUIWidget, self).__init__(parent)
        print("initialising the gui")
        self.vbox = QVBoxLayout()
        self.setLayout(self.vbox)
        self.button = QPushButton("Push me to produce an error")
        self.button.clicked.connect(self.raise_an_expection)
        self.vbox.addWidget(self.button)
        # raise Exception  # nicely handled exception

    def raise_an_expection(self):
        raise Exception  # poorly handled exception


if __name__ == '__main__':
    main()

在未注释GUIWidget.__init__()的最后一行的情况下,Python会引发异常和Process finished with exit code 1,如预期的那样。

在评论后,将创建一个带有按钮的应用程序。按预期,按下按钮会引发一个异常,但Process finished with exit code 134 (interrupted by signal 6: SIGABRT)也会引发异常,我不理解。在我的Mac上,这还会导致出现Python quit unexpectedly对话框。

0 个答案:

没有答案