[英]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應用程序。 如果不是這樣,我將不勝感激,了解我需要采取哪些措施來糾正此問題。
更新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.