簡體   English   中英

使用PyDev + Eclipse調試PyQt應用程序

[英]Debugging a PyQt application using PyDev+Eclipse

我通常在Eclipse中使用PyDev進行Python開發。 但是,我是在同一環境中第一次嘗試PyQt。 它運作良好,但有一個例外。 如果程序在Qt主事件循環內的任何地方(包括我自己的代碼內)出錯,則沒有錯誤信息輸出到PyDev控制台。

為了證明這一點,我創建了以下簡單的PyQt應用程序:

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication

# test.ui contains a single Push Button named pushButton
base, form = uic.loadUiType("../ui/test.ui") 

class MainWindow(base, form):
    def __init__(self, parent=None):
        super(base, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.button_pressed)

    def button_pressed(self):
        print('button pressed')
        print(invalid_variable) # intentional error
        pass

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("fusion")
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

如果在if __name__ == '__main__':之后的任何地方if __name__ == '__main__': app.exec_()命令之前的任何地方放置了諸如print(invalid_variable)之類的故意錯誤,則程序將正確地終止於回溯,並且預期的NameError: name 'invalid_variable' is not defined 但是,如果我按在使用上面的代碼我對話框中的按鈕, button pressed控制台上顯示,但隨后在應用程序終止默默在控制台沒有錯誤信息。 其他調試操作(例如斷點和表達式)也可以正常工作。

這是預期的行為嗎? 如果是這樣,您建議如何在此環境中調試PyQt應用程序。 如果不是這樣,我將不勝感激,了解我需要采取哪些措施來糾正此問題。

  • python版本:python-3.4.3.amd64
  • PyDev版本:適用於Eclipse 4.3.0.201508182223的PyDev
  • PyQt版本:PyQt5-5.5-gpl-Py3.4-Qt5.5.0-x64

更新2015-09-30

當我直接使用python.exe運行測試應用程序時,在兩種錯誤情況下,它都會將錯誤正確輸出到stderr 因此,此問題似乎確實是PyDev環境所特有的。 我還創建了一個完全新鮮的Eclipse工作區,僅配置了Python解釋器,並使用相同的源代碼在新創建的PyDev項目上再次運行了測試。 結果是相同的。

這是一個非常古老的問題,但我認為我會提供答案,因為它出現在Google搜索此問題上。

問題是對pyqt5.5 +處理錯誤的更改,包括以下代碼將在崩潰時重新啟用stacktrace。

它在互聯網上進行了大量隨機瀏覽,但最終找到了解決該問題所需的代碼,在此發布以供遇到相同問題的其他人參考。 當我終於找到它時很明顯。 ;)

from PyQt5 import QtCore
import traceback, sys


if QtCore.QT_VERSION >= 0x50501:
    def excepthook(type_, value, traceback_):
        traceback.print_exception(type_, value, traceback_)
        QtCore.qFatal('')
sys.excepthook = excepthook

希望這對其他人有幫助。

我有同樣的問題。 我只添加了一行:

import ipdb

因此,我所有的QT應用程序都向我顯示錯誤。 ipdb-這是用於調試腳本的模塊,但無需任何設置(僅導入),即可根據需要工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM