Frage

Versuchen Sie, diese Datei in Eclipse auszuführen

class Try:
   def __init__(self):
       pass
   def __del__(self):
       print 1
a=Try()
raw_input('waiting to finish')

und drücken Sie die Stopptaste, ohne dass das Programm beendet wird, dh die DEL -Methode wird nie aufgerufen. Wenn ich versuche, das Skript aus der Shell auszuführen und Strg-c sys.exit "1" durchzuführen, wird gedruckt, dh del wird aufgerufen. Das Gleiche, wenn ich versuche, Wait () zu verwenden:

class A:

    def __enter__(self):
        return None
    def __exit__(self, type, value, traceback):
        print 3


with A():
    print 1
    raw_input('Waiting')
    print 2

Wenn ich auf Anspruch auf "Stopp" drücke, wird "3" nicht gedruckt

Warum ist das so? Gibt es einen Weg herum?

Danke, Noam

War es hilfreich?

Lösung

Das Drücken von Stopp in Eclipse tötet den Dolmetscher direkt (obwohl es tatsächlich ziemlich oft fehlschlägt). Wie verwenden kill/taskkill, Der Prozess ist sich seines Niedergangs nicht bewusst.

Strg+c Snippet aus Wikipedia ...

Control-C als Abbruchbefehl wurde von UNIX populär und in anderen Systemen übernommen. In POSIX -Systemen erhält die Sequenz das aktive Programm ein SIGINT -Signal. Wenn das Programm nicht angibt, wie dieser Zustand umgeht, wird es beendet. Normalerweise endet ein Programm, das mit einem SIGINT handelt, und beendet sich immer noch selbst oder beendet die in ihm ausgeführte Aufgabe zumindest.

Ctrl+C ist ein Steuersignal, um das Programm zu unterbrechen, aber wie Sie vielleicht in der Mitte dieses Absatzes bemerkt haben, können Programme angeben, wie Sie das Signal behandeln. In Python, Strg+C. wirft eine Tastaturinterruhrgebietsausnahme aus Das wird normalerweise gefangen und dann verlässt Python sauber. Auch wenn du den Dolmetscher mit tötest Ctrl+C Es kann damit umgehen, dass es die Umgebung reinigt, bevor es beendet ist.

Ich habe Folgendes aufgenommen, weil Sie gefragt haben: "Gibt es einen Weg herum?"

Wenn Sie anhalten möchten raw_input(...) Anrufe, Sie könnten verwenden Ctrl+Z EOF zu senden. Ich habe mich umgesehen und es scheint keine Möglichkeit zu senden, zu senden Ctrl+C/0x03 In Eclipse leider.

Andere Tipps

Python -Dokumente:

__del__(self)

Aufgerufen, wenn die Instanz zerstört werden wird. Dies wird auch als Destruktor bezeichnet. Wenn eine Basisklasse eine hat __del__() Methode, die abgeleiteten Klasse __del__() Wenn vorhanden, muss dies ausdrücklich aufrufen, um die ordnungsgemäße Löschung des Basisklassenteils der Instanz sicherzustellen. Beachten Sie, dass es möglich ist (wenn auch nicht empfohlen!) Für die __del__() Methode zur Verschiebung der Zerstörung der Instanz, indem Sie einen neuen Verweis darauf erstellen. Es kann dann zu einem späteren Zeitpunkt aufgerufen werden, wenn diese neue Referenz gelöscht wird. Es ist nicht garantiert, dass __del__() Methoden werden nach Objekten erforderlich, die noch existieren, wenn der Interpreter ausgeht.

Wenn Sie garantieren möchten, dass eine Methode genannt wird, verwenden Sie die mit Befragung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top