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
Exception/Fehler nicht angezeigt
-
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")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
VG
- 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
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
- __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.
@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
@__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
Ich habe mir gerade dieses Icecream angeschaut und es sieht ziemlich interessant aus.
Danke füt den Tipp
- __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
