Pycharm不显示`PyQt5`程序的错误信息(例如`TypeError`)

liy*_*211 6 python pyqt pyqt5

在Pycharm 4.5.2中,如果我在PyQt5插槽中有错误,当调用插槽时,Pycharm只会显示Process finished with exit code 1,但不会显示错误发生的位置和原因.错误发生时不会发生这种情况__init__.
这使得调试非常困难.我该如何解决?

此小组件由Qt Designer生成

在此输入图像描述

例如,如果我button.setText('a'+1)在点击按钮时写了:

# -*- coding: utf-8 -*-

import sys
from PyQt5 import Qt
from test import Ui_Form

Application = Qt.QApplication(sys.argv)

class myWidget(Qt.QWidget):
    def __init__(self):
        super(myWidget, self).__init__()
        self.main = Ui_Form()
        self.main.setupUi(self)
        # self.main.pushButton.setText('a'+1)
        # prints `TypeError: Can't convert 'int' object to str implicitly ` normally

        self.show()

        self.main.pushButton.clicked.connect(self.show_error)

    def show_error(self):
        self.main.pushButton.setText('a'+1)
        # only print "Process finished with exit code 1" when clicked on the button, and crash.


my_Qt_Program = myWidget()
my_Qt_Program.show()
sys.exit(Application.exec_())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它在Windows控制台中工作正常:

在此输入图像描述

test.py(由Qt Designer生成):

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.5
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(115, 58)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "Show \'a\' +1"))
Run Code Online (Sandbox Code Playgroud)

Abb*_*bby 7

正如评论中所指出的,并且确实在此pycharm 线程中建议:

在您的运行配置中,启用选项Emulate terminal in output console。您可以在执行部分找到它。

运行你的例子

在我的机器(Windows 10、PyCharm Professional 2018.3.1)上,这改变了单击按钮时的行为,show 'a' + 1从退出并显示退出代码 ( -1073740791 (0xC0000409)) 更改为显示

Traceback (most recent call last):
  File "path/to/file/so.py", line 25, in show_error
    self.main.pushButton.setText('a' + 1)
TypeError: can only concatenate str (not "int") to str
Run Code Online (Sandbox Code Playgroud)

为了运行你的例子我必须改变

from PyQt5 import Qt
Run Code Online (Sandbox Code Playgroud)

进入

from PyQt5.QtWidgets import QApplication, QWidget
Run Code Online (Sandbox Code Playgroud)

并将调用更改Qt.Q...Q...相应的,但这可能取决于我的设置。


Rhd*_*hdr 0

也许不完全是你想要的,但这对我有用:

import logging

def main():
    x = 1/0

if __name__ == '__main__':
    logging.basicConfig(level='INFO')
    main()
Run Code Online (Sandbox Code Playgroud)

编辑:如果您有一个文件,则上述方法有效,但它不能解决问题的根源可以在此处找到更好的答案PyQt:退出时没有错误消息(回溯)