[英]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.