Python中使用Pycharm开发PyQt5项目时,程序遇到异常直接退出如何解决?

前几天接触了 PYQT5,发现调试特别不方便...遇到了异常直接返回一个地址然后退出..
想知道除了 Logging,prin,还有断点 debug 之外有没有啥办法啊...

这是主函数

if __name__ == '__main__':
    '''
    主函数
    '''
app = QApplication(sys.argv)
mainWindow = QMainWindow()
ui = Ui_mainWindow()
ui.setupUi(mainWindow)
mainWindow.show()
sys.exit(app.exec_())


Python中使用Pycharm开发PyQt5项目时,程序遇到异常直接退出如何解决?

4 回复

在命令行运行可以捕获到错误信息。


在PyCharm里跑PyQt5程序一崩就闪退,是因为PyQt默认把异常直接喂给Qt的事件循环了。PyCharm的Python控制台接不住这些Qt异常,所以程序直接退出。

解决方法是给Qt装个全局异常钩子,把异常抛回Python的标准异常处理流程。下面这个excepthook的写法是标准做法:

import sys
import traceback
from PyQt5.QtWidgets import QApplication, QMessageBox

def excepthook(exc_type, exc_value, exc_tb):
    """全局异常捕获函数"""
    tb = "".join(traceback.format_exception(exc_type, exc_value, exc_tb))
    print(f"发生异常:\n{tb}")  # 在控制台打印完整堆栈
    # 弹窗显示错误信息(可选)
    QMessageBox.critical(None, "程序异常", f"发生以下异常:\n{str(exc_value)}\n\n详细信息请查看控制台输出。")
    # 按需退出程序
    # sys.exit(1)

# 替换系统的异常处理
sys.excepthook = excepthook

# 你的PyQt5应用代码
app = QApplication(sys.argv)
# ... 你的窗口和其他组件代码 ...
sys.exit(app.exec_())

关键点

  1. 在创建QApplication之前就设置sys.excepthook
  2. 钩子函数里用traceback.format_exception拿到完整堆栈信息。
  3. 打印到控制台后,你可以选择弹窗提示用户(生产环境建议),或者直接记录到日志文件。

这样设置之后,PyCharm就能在Run/Debug控制台里显示完整的Python异常堆栈,方便你定位问题,程序也不会立刻闪退了。

总结建议:挂上全局异常钩子,让PyCharm能抓到Qt的异常。

try catch

这个好用!感谢!!!

回到顶部