Exception/Fehler nicht angezeigt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
malzbier
User
Beiträge: 16
Registriert: Mittwoch 25. November 2020, 09:42

Hallo zusammen,

ich hätte da eine etwas allgemeine Frage. Ich programmiere gerade ein etwas größeres Programm mit einer GUI (pyqt6) und benutze als IDE Pycharm.
Mir ist aufgefallen, dass wenn ich einen Fehler gemacht habe und das Programm abstürzt, ich keine Fehlermeldung auf dem Terminal bekomme.
Wenn ich aber die Methode separat auf einer Testdatei ohne GUI ausführe, bekomme ich eine Fehlermeldung auf dem Terminal.

Weiß jemand woran das liegt und was man dagegen machen kann?
Eventuell mit einem try/catch, aber wie fange ich die richtige Exception ab?

VG

Malzbier
geraldfo
User
Beiträge: 80
Registriert: Samstag 28. Januar 2023, 20:19
Wohnort: Nähe Wien
Kontaktdaten:

Code: Alles auswählen

try:
    print(4 / 0)
except:
    print("Fehler bei der Division")
Du kannst try/except auch ohne Exception-Name verwenden.
malzbier
User
Beiträge: 16
Registriert: Mittwoch 25. November 2020, 09:42

Danke für die Antwort, was mich interessieren würde ist, ob ich die Exception, die vom System geworfen wird, an meine eigene Exception weiterleiten kann, da ich nicht weiß, was für eine Exception geworfen werden kann

VG
Benutzeravatar
DeaD_EyE
User
Beiträge: 1321
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Das kann mehrere Gründe haben, wieso dein Programm beendet wird oder abstürzt.

Ich gehe mal von aus, dass es durch einen logischen Fehler beendet wird.
Wenn z.B. QT6 crashen würde, müsste eine Fehlermeldung in der Konsole ausgeben werden.
Wenn man bei QT falsche Argumente/Datentypen übergibt, kann das zum Absturz führen.

Dann besteht noch die Möglichkeit, dass du Exceptions abfängst und diese nicht behandelst.
Das kann auch manchmal dazu führen, dass ein Programm dann ohne Fehlermeldung beendet wird.
Wahrscheinlicher ist es aber, dass aufgrund des abgefangenen nicht behandelten Fehlers eine weitere Exception geworfen wird.

Du hast den schlimmsten Fall: Programm beendet sich ohne Fehlermeldung
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 14305
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@geraldfo: Die Lösung ist kein nacktes ``except`` was dann am Ende vielleicht etwas falsches behauptet, sondern sehr wahrscheinlich *weniger* ``try``/``except`` wenn irgendwo eine Ausnahme verschluckt wird. Das Problem könnte ja beispielsweise nach der Division bei der Ausgabe passieren, die Ausnahmebehandlung wird aber behaupten es ist die Division.

@malzbier: Startest Du das in einem echten Terminal(emulator) ausserhalb von PyCharm? Es gibt nämlich IDEs die nur die Python-Ausgabe abgreifen und nicht wirklich stdout/stderr vom Prozess, und da werden dann Fehlermeldungen die von Bibliotheken die in anderen Programmiersprachen geschrieben sind, und direkt auf die Ausgabekanäle des Prozesses schreiben, nicht im Terminal innerhalb der IDE angezeigt.

Ansonsten musst Du jetzt wahrscheinlich ein paar strategisch platzierte `print()` (oder `ic()`-Aufrufe aus dem `icecream`-Modul) einbauen. Oder einen Blick auf das `trace`-Modul in der Standardbibliothek (oder das externe `snoop`) werfen.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
malzbier
User
Beiträge: 16
Registriert: Mittwoch 25. November 2020, 09:42

@__blackjack__ Ich starte das Programm innerhalb von PyCharm. Die Fehlermeldungen kommen ja, wenn ich die Methoden in einer externen Testdatei ausprobieren kann. Wenn nicht, dann gehe ich halt den Weg über die print Ausgabe


Ich habe mir gerade dieses Icecream angeschaut und es sieht ziemlich interessant aus.

Danke füt den Tipp :D
Benutzeravatar
__blackjack__
User
Beiträge: 14305
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@malzbier: Die Frage ist ob das Programm überhaupt (direkt) wegen dieser Fehlermeldung abschmiert. Das kann ja noch ein andere Problem geben. Und wenn die C++-Bibliothek hart abraucht und dabei etwas ausgibt, muss das in der IDE nicht unbedingt sichtbar sein. Zudem verändern IDEs die Laufzeitumgebung. Man sollte grundsätzlich auch immer mal ausserhalb der IDE testen, ob sich das Programm da gleich verhält.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten