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_())
关键点:
- 在创建
QApplication之前就设置sys.excepthook。 - 钩子函数里用
traceback.format_exception拿到完整堆栈信息。 - 打印到控制台后,你可以选择弹窗提示用户(生产环境建议),或者直接记录到日志文件。
这样设置之后,PyCharm就能在Run/Debug控制台里显示完整的Python异常堆栈,方便你定位问题,程序也不会立刻闪退了。
总结建议:挂上全局异常钩子,让PyCharm能抓到Qt的异常。
try catch
这个好用!感谢!!!

