我正在使用一个脚本(一个PyQt5 GUI应用程序),该脚本可以正常工作,也可以在使用控制台创建的exe上按预期工作。我无法摆脱控制台,因为它立即因“致命错误”而崩溃。
是否可以获取有关问题所在的详细信息?我在脚本规范中尝试了debug=True
,它显示了各种过程消息,试图运行主文件并因相同的致命错误而崩溃。我还在开头添加了以下代码,以重定向所有打印消息:
file = open('output.txt', 'a')
sys.stdout = file
main.run()
file.close()
同样,它可以正常运行,但是将其转换为非控制台exe会使它立即崩溃。
有人可以让我知道如何查找有关“致命错误”问题的详细信息吗?
谢谢。
答案 0 :(得分:0)
这是我无法解释的奇怪行为。但是,由于您要求获取更多调试信息的方法,因此在运行而没有附加控制台似乎导致该问题的情况下,我建议以下做法。
首先,如果将stdout
重定向到文件,这是一个好主意,但是也应该重定向stderr
。
最好使用Python的logging
模块(它是标准库的一部分)将错误回溯写到文件中。额外的优点是,日志文件还可以从所涉及的库中捕获有价值的调试信息,因为logging
是报告非关键错误和警告的常用方法。
演示:
import logging
logging.basicConfig(filename='log.txt', level=logging.DEBUG)
try:
raise OSError('Emulated exception to be traced back to in log file.')
except Exception:
logging.error('A critical error occurred.', exc_info=True)
在这里,您告诉它将所有日志信息写入与log.txt
相同的文件夹中的名为.exe
的文件中。您应该将try: ... except:
块包装在主入口点(在您的示例中为main.run()
)周围。 exc_info=True
选项可确保日志文件中包含以前未处理的异常的完整错误回溯。