3

私はグローバルインスタンスを持っていますが__del__、Pythonインタープリターが終了すると破棄される(関数が呼び出される)と予想されます。Pythonインタープリターに期待しすぎていませんか?__del__これをテストする私の方法は、関数に印刷を入れ、python.exeコマンドラインから実行してからCtrl/Breakを押すことです。この時点で、コマンドラインウィンドウに印刷が表示されることを期待しています。しかし、私はしません。

4

2 に答える 2

6

はい、あなたはあまりにも多くを期待しています。Pythonは呼び出しについて何の保証もしません__del__

__del__()インタプリタの終了時にまだ存在するオブジェクトに対してメソッドが呼び出されることは保証されていません。

編集:

通常、は使用しないでください__del__。ほとんどの場合、コンテキストマネージャーの方が優れています。まれに、インタプリタの終了時に外部(つまり、Cコードから割り当てられた)リソースがクリーンアップされることを確認する必要がある場合は、atexitモジュールを使用できます。

于 2013-03-20T23:21:36.213 に答える
4

signal.SIGBREAKシグナルのハンドラーを追加できます。ctrl+をインターセプトできますbreak。ドキュメントを作成します

import signal, os

def handler(signum, frame):
    print 'Someone is trying to exit!', signum

signal.signal(signal.SIGBREAK, handler)
于 2013-03-20T23:18:57.213 に答える