【问题标题】:Traceback missing when exception encountered in pyqt5 Code in eclipse(pydev)eclipse(pydev)中的pyqt5代码中遇到异常时缺少回溯
【发布时间】:2017-11-10 20:59:05
【问题描述】:

这可能是对过去一个未回答的问题的轻微重复,但我希望我能提供更多信息并看到它得到解答。

问题是,一旦代码进入 PyQt5 的循环,任何崩溃都无法导致回溯显示在控制台或我知道的其他任何地方,但是如果只是从命令行使用与 eclipse 使用的完全相同的命令。

在单独的计算机上全新安装所有列出的组件后确认问题。

构建环境:
日食霓虹灯 4.6.3 - 64 位 Java
pydev 5.8
python 3.6.1 64 或 32 位版本
PyQt 5.8.2 - 通过 pip3 安装

这是一个演示该问题的完整微程序,如果我从命令行运行它并单击按钮,我会得到一个回溯,但如果程序运行并且从 Eclipse 中按下按钮,我就没有得到回溯。

from PyQt5 import QtWidgets
import sys

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.btn = QtWidgets.QPushButton('text', self)
        self.btn.clicked.connect(self.handleButton)

    def handleButton(self):
        error_trigger


if __name__ == '__main__':
    print ("Start")
    app = QtWidgets.QApplication(sys.argv)
    #error_trigger
    myapp = MainWindow()
    myapp.show()
    sys.exit(app.exec_())

是否有人知道会导致此行为的任何已知问题或配置选项?

【问题讨论】:

  • 如果 PyQt 中止,这可能是不显示输出的原因。
  • 这似乎是对正在发生的事情的合理解释,但没有提供有关如何解决或解决问题的任何解释。如果没有人对如何解决它有任何想法,我想我最好将整个问题作为 PyDev 中的错误提交。
  • 对我来说绝对看起来像一个 PyDev/Eclipse 错误,是的。您可以设置 sys.excepthook 以这种方式处理异常,但由于 PyQt 不能在 C++ 函数中中止,您可能会遇到未定义的行为。见pyqt.sourceforge.net/Docs/PyQt5/incompatibilities.html

标签: python eclipse pydev pyqt5


【解决方案1】:

在互联网上进行了很多随机浏览,但最终找到了解决问题所需的代码,在此处发布以供遇到相同问题的其他人参考。当我终于找到它时很明显。 ;)

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

希望这对其他人有所帮助。

【讨论】:

  • 你太棒了。为我节省了很多时间。
  • 你太棒了!!非常感谢 :-) 另外对于那些使用 PyCharm 的人,另一种方法是使用调试器运行程序,然后切换到调试窗口 -> 控制台,在控制台窗口中你会看到回溯。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2013-07-17
  • 2011-03-13
  • 2011-09-17
  • 2015-06-06
相关资源
最近更新 更多