【问题标题】:Getting QMessageBox stderr messages back in Python 3.5.2 & PyQt5在 Python 3.5.2 和 PyQt5 中获取 QMessageBox 标准错误消息
【发布时间】:2016-10-28 10:50:50
【问题描述】:

我有一个最初用 Python 3.4 和 PyQt4 编写的 Windows 应用程序,它通过信号和插槽将 stderr 重定向到对话框。 This posting 描述了我是如何工作的(见最后的代码)。它工作得很好,捕获了您通常会在控制台上看到的所有漂亮的详细 stderr 消息。这是一个典型的屏幕截图:

但是,当我安装 Python 3.5.2、PyQt5 并升级了我的几个包时,它不再工作了。现在,当我遇到错误时,我的整个应用程序会立即关闭,我无法追踪错误。

但是,当我在 pydev 调试器中运行我的应用程序时,我漂亮的窗口化 stderr 消息又回来了。我将调试器设置为中断所有错误,它确实如此,这允许我的窗口化 stderr 文本出现。

还有另一种方法可以恢复窗口错误消息:将我的一个核心包 (lmfit) 从最新的 0.9.5 恢复到我使用的早期 0.9.3。

谁能建议可能发生的事情?我询问了 lmfit 开发人员他们可能会改变什么,并尝试了十几种不同的替代方案,但都没有成功。

【问题讨论】:

    标签: python python-3.x pyqt5 stderr


    【解决方案1】:

    过滤 stderr 消息有点骇人听闻。使用excepthook 集中处理未处理的异常。 traceback 模块可用于以多种方式格式化异常。

    如果您还想处理 Qt 消息,请使用qInstallMessageHandler。要格式化这些消息,您可以使用qFormatLogMessageqSetMessagePattern。所有这些功能都在 QtCore 模块中。

    【讨论】:

    • @ekumoro -- 谢谢,看起来这将提供与我从 stderr 获得的相同信息。我会解决并报告。
    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多