PyQt5失败了,含有神秘的信息

时间:2017-03-27 06:11:15

标签: python qt5 pyqt5

我用模型和视图创建了小应用程序。从一开始PyQt5每次出现问题时都会崩溃Process finished with exit code -1073740791 (0xC0000409)
它非常神秘。我不知道哪个组件失败了。有一段时间我能通过调试解决这个问题,但有些事情失败了,我不知道是什么。

如何从PyQt5获取调用堆栈?如何获得更详细的崩溃消息?

Python 3.6.1 PyQt5 5.8.1 PyCharm

1 个答案:

答案 0 :(得分:3)

通过将 NVIDIA驱动程序回滚到以前的版本来管理修复它。我在版本 378.49 并切换回 376.33 ,现在一切正常。无论你的显卡如何,你都可以尝试一下。

GTX 965M 的示例:

  

转到设备管理器 - >显示适配器 - > NVIDIA GeForce GTX 965M   (右键单击) - >属性 - >驱动程序标签 - >回滚驱动程序。

注意:

有一个新版本的 Nvidia驱动程序(378.66)。 与 guru3d 中的驱动程序相比 - 您拥有原始供应商的驱动程序和最新修复程序。 :)

我在笔记本电脑上测试了这个版本(使用 GeForce GTX 960M )。

它在环境控制台上以退出代码0启动,工作和完成。 现在似乎还可以。

以下是 Nvidia 自其驱动程序(378.49)版本以来所发生的变化:

(取自http://us.download.nvidia.com/Windows/378.66/378.66-win10-win8-win7-notebook-release-notes.pdf,第15页)

<强>更新

我处理过同样的问题,答案是双重的:

  1. 它崩溃的原因可能是任何事情。它可能是一个编程错误,调用一个不存在的函数,传递一个小部件而不是一个布局等等。但是因为你没有得到有用的输出你不知道在哪里寻找罪魁祸首。
  2. PyQT引发并捕获异常,但不会传递它们。相反,它只是退出状态为1以显示异常被捕获。
  3. 要捕获异常,您需要覆盖sys异常处理程序:

    # Back up the reference to the exceptionhook
    sys._excepthook = sys.excepthook
    
    def my_exception_hook(exctype, value, traceback):
        # Print the error and traceback
        print(exctype, value, traceback)
        # Call the normal Exception hook after
        sys._excepthook(exctype, value, traceback)
        sys.exit(1)
    
    # Set the exception hook to our wrapping function
    sys.excepthook = my_exception_hook
    

    然后在执行代码中,将其包装在try / catch中。

    try:
        sys.exit(app.exec_())
    except:
        print("Exiting")