Hallo,
Ich verwende den Thonny Editor und möchte bei run / stop , jeweils eine Programmeldung dazu abfangen.
Also wenn ich Programm stoppe, soll noch eine Meldung, Befehlabfolge ablaufen. Mit try except bin ich leider nicht weiter gekommen, kann mir als Python Anfänger ein Tipp geben?
Mein Code
Import sys
Try:
While Try:
Print(„program läuft“)
Except:
If quit():
Print(„gestoppt“)
Finally:
Print(„ Programm wurde gestoppt“)
Vielen Dank und Grüße
Steffen
Stop Programm über Thonny Python , abfangen
Groß-Kleinsschreibung ist in Python relevant, Schlüsselworte werden alle klein geschrieben. Dein Code ist also unverständlich und es ist schwierig zu helfen, weil wir nicht wissen, was jetzt Schreibfehler und was Programmierfehler. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal zwei und mal drei.
`sys` wird importiert, aber nicht benutzt. `try` ist ein Schlüsselwort, und kann nicht als Ausdruck in `while` stehen. Nakte excepts darf man nicht benutzen, weil man dann nicht sehen kann, welcher Fehler denn im try-Block aufgetreten ist.
Wenn im except-Block etwas auftritt, was wieder eine Exception auslöst (wie bei Deinem Code), dann wird der finally-Block nicht mehr aufgerufen.
`sys` wird importiert, aber nicht benutzt. `try` ist ein Schlüsselwort, und kann nicht als Ausdruck in `while` stehen. Nakte excepts darf man nicht benutzen, weil man dann nicht sehen kann, welcher Fehler denn im try-Block aufgetreten ist.
Wenn im except-Block etwas auftritt, was wieder eine Exception auslöst (wie bei Deinem Code), dann wird der finally-Block nicht mehr aufgerufen.
Code: Alles auswählen
try:
while True:
print("program läuft")
finally:
print("Programm wurde gestoppt")
Was soll denn quit() eigentlich sein? Wenn es sich dabei um das vordefinierte quit aus dem site-Modul handelt, dann würde ich dazu gerne die Dokumentation von quit (und exit) zitieren: "They are useful for the interactive interpreter shell and should not be used in programs."
Hi, erstmal vielen Dank für eine Antwort.
Also ich habe über den Python Editor Thonny ein Programm laufen, wo ich meine Sieben Segmentanzeige über Raspery Pi ansteuerere.
Wenn ich im Editor auf Stop Button gehe, möchte ich das dann nochmal eine gesteuerte Aktion im Programm abläuft (Setze LED Anzeig zurück).
Bisher habe ich noch keinen Weg gefunden, wie ich im programm darauf reagieren kann, ich dachte die Try except methode sollte das abfangen, geht aber nicht.
Der mir am ähnlichste Befehl zu dem "manuell ausgelösten Stop" wäre quit() oder sys.exit, ist aber leider nicht der fall.
Also ich habe über den Python Editor Thonny ein Programm laufen, wo ich meine Sieben Segmentanzeige über Raspery Pi ansteuerere.
Wenn ich im Editor auf Stop Button gehe, möchte ich das dann nochmal eine gesteuerte Aktion im Programm abläuft (Setze LED Anzeig zurück).
Bisher habe ich noch keinen Weg gefunden, wie ich im programm darauf reagieren kann, ich dachte die Try except methode sollte das abfangen, geht aber nicht.
Der mir am ähnlichste Befehl zu dem "manuell ausgelösten Stop" wäre quit() oder sys.exit, ist aber leider nicht der fall.
Wenn Thonny beim Drücken auf "Stop" den finally-Block nicht ausführt, dann hast Du keine Chance, noch darauf zu reagieren. Das zeigt mal wieder, dass manche IDEs nicht zum Ausführen von Prograammen nicht geeignet sind. Starte also das Programm nicht mit Thonny, oder benutze zumindest den Stop-Button nicht.
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das Problem ist, dass der Stop-Button in der IDE den Prozess tatsächlich killt (in thonny/running.py):
Das heisst da wird nicht wie bei `terminate()` der Prozess gebeten sich zu beenden, wo er noch drauf reagieren könnte, sondern es wird dem Betriebssystem gesagt es soll den Prozess beenden.
Lösung innerhalb von Thonny wäre nicht Stop, sondern Strg+C beziehungsweise im Menü „Run → Interrupt execution“ zu verwenden. Da kann das Programm noch drauf reagieren und ``finally``-Blöcke werden noch ausgeführt.
Code: Alles auswählen
def _close_backend(self):
if self._proc is not None and self._proc.poll() is None:
logger.info("Killing backend process")
self._proc.kill()
self._proc = None
self._response_queue = None
Lösung innerhalb von Thonny wäre nicht Stop, sondern Strg+C beziehungsweise im Menü „Run → Interrupt execution“ zu verwenden. Da kann das Programm noch drauf reagieren und ``finally``-Blöcke werden noch ausgeführt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman