【问题标题】:QNetworkAccessManager Process Finished With Exit Code 139 (Interrupted by signal 11: SIGSEGV)QNetworkAccessManager 进程以退出代码 139 结束(被信号 11 中断:SIGSEGV)
【发布时间】:2019-11-25 08:26:33
【问题描述】:

基本上,我在 QStackedWidget 中有 4 个小部件,它们是:

  1. HomeWidget
  2. 进程小部件
  3. 确认小部件
  4. 加载小部件

在 ProcessWidget 和 LoadingWidget 中,我将使用 QNetworkAccessManager 与我的 API 进行通信。

我的申请流程:

  1. 从 HomeWidget 开始。

  2. 然后,切换到 ProcessWidget。

  3. 然后,切换到 ConfirmWidget。

  4. 然后,切换到 LoadingWidget。

  5. 然后,切换回 HomeWidget 等等。

在 ProcessWidget 中,我只提出 1 个请求。但在 LoadingWidget 我有 4 个请求。

这是我为每个请求进行通信的方式(每个请求的区别仅在于 URL):

def doRequest(self):
    url = "http://127.0.0.1:8000/api"
    req = QtNetwork.QNetworkRequest(QUrl(url))

    self.networkAccessManager = QtNetwork.QNetworkAccessManager()
    self.networkAccessManager.finished.connect(self.handleResponse)
    self.networkAccessManager.get(req)

def handleResponse(self, reply):

    er = reply.error()

    if er == QtNetwork.QNetworkReply.NoError:

        bytes_string = reply.readAll()
        data = json.loads(str(bytes_string, 'utf-8'))

        # Do something

    else:
        errorMessage = "Error occured: "+ str(er) + "\n"+ str(reply.errorString())
        # Do something

问题是,在我的应用程序流程的第 4 次迭代中,我的应用程序突然崩溃了。它给出了这个错误:

Process Finished With Exit Code 139 (Interrupted by signal 11: SIGSEGV)

错在哪里?

【问题讨论】:

    标签: python pyqt pyqt5


    【解决方案1】:

    最后,我可以通过重新定义提出请求的方式来解决问题。

    这是代码:

    # Instantiate the NetworkAccessManager as the Widget's property
    self.networkAccessManager = QtNetwork.QNetworkAccessManager() 
    
    def doRequest(self):
        url = "http://127.0.0.1:8000/api"
        req = QtNetwork.QNetworkRequest(QUrl(url))
    
        reply = self.networkAccessManager.get(req)
        reply.finished.connect(self.handleResponse)
    
    def handleResponse(self):
    
        reply = self.sender()
    
        er = reply.error()
    
        if er == QtNetwork.QNetworkReply.NoError:
    
            bytes_string = reply.readAll()
            data = json.loads(str(bytes_string, 'utf-8'))
    
            # Do something
    
        else:
            errorMessage = "Error occured: "+ str(er) + "\n"+ str(reply.errorString())
            # Do something
    
        reply.deleteLater()
    

    我可以断定问题出在回复对象上。

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2022-01-26
      • 1970-01-01
      • 2021-09-12
      • 2020-07-02
      • 2020-12-05
      • 1970-01-01
      • 2018-05-03
      相关资源
      最近更新 更多