如何在pyside2中记录c ++中引发的qt异常

时间:2020-07-14 12:19:21

标签: python pyqt5 pyside2

我有一个QT5 / Pyside2应用程序愉快地登录到文件中。还通过excepthook记录异常:

sys.excepthook = lambda t, value, tb: log.exception(f'{t} {value} {"".join(traceback.format_exception(t, value, tb))}')

但是QT引发的某些异常似乎未通过处理程序。它们只是打印到控制台上。

2020-07-14 13:42:51,676 - TRACE - sidewindow::__init__() - new view. call super.
2020-07-14 13:42:51,681 - TRACE - sidewindow::__init__() - show window and append
QWindowsEGLStaticContext::createWindowSurface: Could not create the EGL window surface: 0x3003
qt.qpa.backingstore: composeAndFlush: makeCurrent() failed
createDIB: CreateDIBSection failed (1273x666, format: 6)

如何将这些异常重定向到文件或让python处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

过去我在PyQt上遇到了完全相同的问题,因此我编写了一个简单的模块,该模块可以为stdout和stderr设置输出文件。该模块称为pyfreopen,但必须进行编译。

不幸的是,我是在很多时候使用Python 2.7做到的,所以它可能无法在Python 3上运行(我待在家里,将检查它是否也可以为Python 3构建)。

用法很简单:

freopen.set_stdout(path="stderr.log")
freopen.set_stderr(path="stdout.log")

请注意,如自述文件所述,一旦设置了输出,就无法将其恢复为默认行为。

相关问题