【发布时间】:2015-12-27 17:21:28
【问题描述】:
我经常在 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__': 之后和app.exec_() 命令之前的任何位置放置了诸如print(invalid_variable) 之类的故意错误,则程序会以回溯和预期的NameError: name 'invalid_variable' is not defined 正确终止。但是,如果我使用上面的代码在对话框中按下按钮,button pressed 会出现在控制台上,但是应用程序会静默终止,并且控制台中没有错误信息。其他调试操作,例如断点和表达式,都可以正常工作。
这是预期的行为吗?如果是这样,您建议在此环境中促进 PyQt 应用程序的调试。如果没有,我希望能深入了解我需要做些什么来纠正这个问题。
- Python 版本:python-3.4.3.amd64
- PyDev 版本:PyDev for Eclipse 4.3.0.201508182223
- PyQt 版本:PyQt5-5.5-gpl-Py3.4-Qt5.5.0-x64
更新2015-09-30:
当我直接使用 python.exe 运行测试应用程序时,它在两种错误情况下都将错误正确输出到 stderr。所以这个问题似乎是 PyDev 环境特有的。我还创建了一个全新的 Eclipse 工作区,仅配置了 Python 解释器,并使用相同的源代码在新创建的 PyDev 项目上再次运行我的测试。结果是一样的。
【问题讨论】:
标签: python eclipse qt pyqt pydev