Ich versuche, etwas in einer Schleife zu machen (in diesem Beispiel auf 100 zu drucken) und die Zählung jederzeit durch Drücken von 'Strg + C' abzubrechen.Warum funktioniert KeyboardInterrupt in Python nicht, wenn Wing IDE 101 verwendet wird?
Der Testcode, den ich benutze, ist unten, aber das funktioniert nicht (EDIT: es funktioniert in einem Skript vom Terminal gestartet, funktioniert aber nicht, wenn in der Python-Shell meiner IDE ausgeführt - Wing 101). KeyboardInterrupt fängt den Befehl 'Strg + C' oder einen anderen Schlüssel nicht ab.
import time
i = 1
while (i < 101):
try:
print '%d percent complete' % i
time.sleep(0.5)
i += 1
except KeyboardInterrupt:
break
Ich habe diese Frage here gelesen, und ich bin mir ziemlich sicher, dass nicht mein Problem, weil ich die ‚time.sleep (0,5)‘ gesetzt habe Befehl in das Programm zu verlangsamen. Ich habe auch this question gelesen, aber da es jetzt 5 Jahre alt ist, nehme ich an, dass dieser Bug inzwischen behoben worden wäre? Ich weiß, dass ich Threading verwenden kann, um das zu erreichen, was ich will, aber nur zum Zweck des Lernens würde ich gerne wissen, warum diese Methode nicht funktioniert.
Ich benutze Python 2.7.6 in Ubuntu 14.04 und ich würde jede Hilfe oder Beratung bei der Lösung dieses Problems zu schätzen wissen. (EDIT: Ich weiß, dass der Code funktioniert in Isolation, aber ich würde immer noch daran interessiert sein zu wissen, warum es nicht in dem Python-Shell von Wing 101 IDE funktioniert)
EDIT 1
Ich habe versucht, die while-Schleife innerhalb des try-Block setzen, wie vorgeschlagen:
try:
i = 1
while (i < 101):
print '%d percent complete' % i
time.sleep(0.5)
i += 1
except KeyboardInterrupt:
break
Aber leider, das funktioniert auch nicht, stattdessen bekomme ich folgende Fehlermeldung:
Traceback (most recent call last):
File "/home/matt/autosys_repo1/python_test_scripts/test_refresh_line.py", line 13, in <module>
break
'break' outside loop: <string>, line 13
Es gibt einen Unterschied zwischen Ihrem Ansatz und einer Antwort im ersten Thread, den Sie verknüpft haben. Der Typ schlägt vor, die Schleifensätze in den try Block zu setzen. Sie haben den while-Satz außerhalb des try/except. Hast du es so versucht? Edit: Ich habe Ihren Code ausprobiert und es funktioniert wie erwartet. – pazitos10
Danke für den Vorschlag @Brnpzs. Leider klappt das auch nicht (siehe Edit 1). Und ja, es scheint für alle anderen zu funktionieren, deshalb bin ich verwirrt darüber, warum es nicht für mich funktionieren wird. Ich fühle mich wie ein kleines Detail, das ich übersehen habe. – Matt
Pause hat keinen Sinn außerhalb der Schleife, können Sie sys.exit (0) verwenden, um den Ausgang zu erzwingen. Um dies zu tun, müssen Sie zuerst sys-Modul importieren. – pazitos10