Ich habe ein Problem mit einigen meiner Code, die pyqt5 verwenden. Wenn in meinen Qt-Klassen etwas schief läuft, protokolliert die Konsole keine Informationen darüber, warum die Abstürze passiert sind. zum Beispiel mit diesem Code:Warum Python-Konsole in PyCharm zeigt keine Fehlermeldung, wenn Pyqt verwendet wird?
rom PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class SurfViewer(QMainWindow):
def __init__(self, parent=None):
super(SurfViewer, self).__init__()
self.parent = parent
self.centralWidget = QWidget()
self.color = self.centralWidget.palette().color(QPalette.Background)
self.setCentralWidget(self.centralWidget)
self.plotview = QGroupBox(" ")
self.layout_plotview = QVBoxLayout()
self.Button_Crash= QPushButton('Crash!')
self.layout_plotview.addWidget(self.Button_Crash)
self.centralWidget.setLayout(self.layout_plotview)
self.Button_Crash.clicked.connect(self.TestForCrash)
def TestForCrash(self,):
a=b
return
def main():
app = QApplication(sys.argv)
ex = SurfViewer(app)
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Als b
nicht in TestForCrash
Funktion bekannt ist, beendet das Qt Fenster nur, aber ich habe nichts in der Konsole bekommt. Ich frage mich, ob es eine Möglichkeit ist, die Konsole zu zwingen, automatisch einen Hinweis darauf zu drucken, was vor sich geht.
Denn jetzt bin ich mit ein try
except
, um das Problem zu gehen, aber ich diese Idee nicht viel mag:
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class SurfViewer(QMainWindow):
def __init__(self, parent=None):
super(SurfViewer, self).__init__()
self.parent = parent
self.centralWidget = QWidget()
self.color = self.centralWidget.palette().color(QPalette.Background)
self.setCentralWidget(self.centralWidget)
self.plotview = QGroupBox(" ")
self.layout_plotview = QVBoxLayout()
self.Button_Crash= QPushButton('Crash!')
self.layout_plotview.addWidget(self.Button_Crash)
self.centralWidget.setLayout(self.layout_plotview)
self.Button_Crash.clicked.connect(self.TestForCrash)
def TestForCrash(self,):
try:
a=b
except BaseException as e:
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText(str(e))
msg.setStandardButtons(QMessageBox.Ok)
msg.exec_()
return
def main():
app = QApplication(sys.argv)
ex = SurfViewer(app)
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Ist ihr eine andere Art und Weise einige Informationen in der Konsole anzumelden, ohne einen try
mit except
?
Wie erwähnt von @ three_pineapples, habe ich Fehler, wenn ich das Skript in 'echten' Windows-Terminal ausführen (mit c: \ anaconda3 \ python.exe), aber nicht in der PyCharm-Konsole (wenn ich das Skript ausführen) . So ist es eine Möglichkeit, Fehlerprotokolle in Pycharm direkt zu erzwingen? Vielleicht ist es eine Option, die ich noch nicht gefunden habe?
Verwenden Sie Python.exe oder Python ** w **. Exe, um den Code zu starten? Ersteres sollte Ausnahmen zum Terminal drucken. –
Ich verwende PyCharm und der Interpreter, den ich gewählt habe, ist c: \ anaconda3 \ python.exe. noch nichts gedruckt. – ymmx
Sie haben jedoch Recht, wenn ich das Skript mit einem Windows-CMD mit c: \ anaconda3 \ python.exe ausführen, habe ich Fehler im Terminal anmelden. Das Problem kommt vielleicht von PyCharm? – ymmx